0

我正在使用 .NET 套接字制作客户端/服务器程序(它是我正在使用的系统的模型),以便于使用。一切顺利,数据全部发送;最大的问题是 char 数组。

我发送的数据包本质上是结构内的一堆双精度和一个字符数组(这是必要的/必不可少的,因为它在我正在模仿的系统上对数据包进行建模)。所有的双打都工作得很好,但是 char 数组有点棘手,因为数组需要 4 个字节/字符长。

我一直在使用编组库来处理字节数据以及 4 的 Char 数组缓冲区大小,如下所示:

[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public char[] tmp;

我还使用: [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] 确保我的字符为 1 个字节。最终将读取我的客户端程序的服务器是用 C 语言编写的,我想确保类型对齐。

无论如何,我当前用来测试东西的服务器程序接收到数据包并且一切正常,但是当我尝试打印它以进行调试时,char 数组并没有完全按计划进行。

我有一个大字符串,我把所有的东西都放进去,像这样:

return_str += "\nChar Array (tmp) : " + str.tmp;

然后我用稍后的函数调用打印它。

打印的内容如下:

 System.Char[] .

而不是我指定的 char 数组(IE、ABCD 或类似的东西)。

我指定数据包值的方式是使用带有滑块和文本框等的 Windows 窗体应用程序。就像我说的那样,双打都完美地传达了它们的值,但这是另一个问题。

我不确定这是否是编组代码的问题,或者只是我缺少 char 数组的问题。

真的可以使用一些帮助

4

1 回答 1

3

调用ToString()achar[]将准确打印您所看到的内容。

您需要使用 将您char[]的字符串转换为字符串new string(str.tmp)

如果您正在读取字符串,请考虑使用 abyte[]代替,然后使用System.Encoding.Text来读取字符串(有用于 ASCII 和各种 UTF 变体的编码器)。

于 2012-11-12T20:42:58.273 回答