Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中的定长字符串或结构#_C#_.net_Vb.net - Fatal编程技术网

C# C语言中的定长字符串或结构#

C# C语言中的定长字符串或结构#,c#,.net,vb.net,C#,.net,Vb.net,我需要为我正在进行的项目创建一个固定长度的结构或一系列字符串。目前,它是用COBOL编写的,是一个通信应用程序。它通过web发送固定长度的记录,并接收固定长度的记录。为了简单起见,我想把它写成一个结构,但到目前为止,我发现最好的方法是使用string.padright将字符串终止符放在正确的位置 我可以编写一个类来封装它并返回一个固定长度的字符串,但我希望找到一种简单的方法来填充结构并将其用作固定长度的记录 编辑-- 固定长度记录用作URL中的参数,因此其http:\somewebsite.co

我需要为我正在进行的项目创建一个固定长度的结构或一系列字符串。目前,它是用COBOL编写的,是一个通信应用程序。它通过web发送固定长度的记录,并接收固定长度的记录。为了简单起见,我想把它写成一个结构,但到目前为止,我发现最好的方法是使用string.padright将字符串终止符放在正确的位置

我可以编写一个类来封装它并返回一个固定长度的字符串,但我希望找到一种简单的方法来填充结构并将其用作固定长度的记录

编辑--


固定长度记录用作URL中的参数,因此其http:\somewebsite.com\parseme?record=“firstname lastname address city state zip”。我很确定我不必担心ascii到unicode的转换,因为它在url中。它比地址大一点,传递的信息比地址多,大约有30或35个字段。

将MarshalAs标记添加到您的结构中。以下是一个例子:

<StructLayout (LayoutKind.Sequential, CharSet:=CharSet.Auto)> _
Public Structure OSVERSIONINFO
    Public dwOSVersionInfoSize As Integer
    Public dwMajorVersion As Integer
    Public dwMinorVersion As Integer
    Public dwBuildNumber As Integer
    Public dwPlatformId As Integer

    <MarshalAs (UnmanagedType.ByValTStr, SizeConst:=128)> _
    Public szCSDVersion As String
End Structure
_
公共结构OSVERSIONINFO
公共dwOSVersionInfoSize为整数
公共dwMajorVersion为整数
作为整数的公共dwMinorVersion
公共dwBuildNumber为整数
公共dwPlatformId为整数
_
作为字符串的公共版本
端部结构

您可以使用VB6 compat类,但是编写自己的类非常简单

如果您需要解析和验证以及所有这些有趣的东西,您可能想看看哪些使用属性来进行分析


FWIW,对于任何相对琐碎的事情(例如数据处理),我可能只会使用ToFixedLength()扩展方法,在写入记录时根据需要进行填充或截断。对于任何更复杂的问题(如验证或解析),我会求助于FileHelpers。

作为回答,您应该能够使用正确大小的字符数组,而无需封送处理


此外,.net中的类和结构之间的差异很小。结构不能为null,而类可以为null。否则,它们的用途和功能几乎完全相同


最后,听起来您应该注意要发送的字符的大小。我假设(我知道,我知道)COBOL使用8位ASCII字符,而.net字符串将使用UTF-16编码字符集。这意味着在COBOL中,10个字符的字符串是10个字节,但在.net中,相同的字符串是20个字节。

MarshalAs用于与PInvoke(非托管代码)进行互操作。由于OP似乎一直保留在托管代码中,直到向web发出请求为止,所以它永远不会被封送。“类和.net中的结构之间的区别很小。结构不能为null,而类可以为null。否则,它们的用途和功能几乎相同。”很抱歉,这是一个否定的说法,但这是非常错误的。