通过C# Scoket收发数据,结构体转换成byte数据流问题(结构体中包含int数组时无法解决)

我在C#Scoket中通过TCP协议,收发一个结构体,如果结构体中包含的元素是string或是int型的数据都可以收发成功了。但是换成int[]数组的,接收到的始终是乱码... 我在C# Scoket中通过TCP协议,收发一个结构体,如果结构体中包含的元素是string或是int型的数据都可以收发成功了。但是换成int[]数组的,接收到的始终是乱码。
先介绍下背景情况:
我这边是跟服务器交互,服务器是ON2000系统,通过TCP报文通信。
报文格式已经规定,大致如下:
头部 int
报文长度 int
报文类型 short
个数(N) short
id号(N个)int
在这里我想用一个int型的数组来存放这里的id号码。
但是现在无法解决将这个包含int数组的结构体转换成byte后的数据接收。如果将这个数组换成一个int型的数据,则可以正常收发了。在客户端调试时,发现,当结构体转换为byte流时,只能转换结构体中的那个int数组的第一个元素,之后的几个全没了。

然后我也在CSDN上发了贴,得到了不少回应,其中有位朋友建议在定义结构体时在数组字段加上加长度属性。如下:
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
int[] IDS { get; set; }
我试了,已经测试通过,可用。但是由于我是跟服务器交互,服务器端的接受方不可编辑,我必须按照接收端的协议操作。当我在数组字段前加上长度属性后,必须将int数组定义的足够大,这样得到的byte流会有很多冗余的空间,这样的数据恐怕服务端无法接受,所以希望可以有更好的方法来解决int数组转byte的问题。
有哪位高手可以指点一下的?!谢谢了~~
展开
 我来答
sinobo
2011-12-19 · 超过15用户采纳过TA的回答
知道答主
回答量:37
采纳率:0%
帮助的人:27.2万
展开全部
C#的结构体与以前的C的结构体可不一样。例如你C定义一个结构体包含一个char成员,那么传递的结构体就是1字节;但是C#定义这样的结构体,你直接传递结构体,那可真不是1字节,带有好多其他的信息呢。
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式