我正在制作一个客户端/服务器程序(它是我正在使用的系统的模型),带有.NET套接字,易于使用。一切都在游泳,数据全部发送;最大的问题是char数组。
我发送的数据包本质上是一堆双精度数和一个结构内的char数组(这是必要的/必要的,因为它模拟了我模仿的系统上的数据包)。所有双打都工作得很好但是char数组有点棘手,因为数组需要4个字节/字符长。
我一直在使用编组库来处理字节数据以及Char数组缓冲区大小为4,如下所示:
[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数组的问题。
真的可以使用一些帮助
答案 0 :(得分:3)
在ToString()
上拨打char[]
将准确打印您所看到的内容。
您需要使用char[]
将new string(str.tmp)
变为字符串。
如果您正在阅读字符串,请考虑使用byte[]
,然后使用System.Encoding.Text
读取字符串(有ASCII和各种UTF变体的编码器)。