c#中的固定/可变长度结构和大端转换

时间:2010-02-25 08:16:42

标签: c# c++ structure endianness

Struct {
 byte F1[2]
 SHORT F2
 byte F3[512]
} BPD


CBD
{
 SHORT CLENGTH
 byte DATA[]
}

以上是2 c ++结构。这里SHORT是2字节签名。 将它转换为C#的最佳方法是什么?

(注意,在DATA的第二个结构长度是未定义的。)

我见过以下两个链接。

Fixed length strings or structures in C#

Reading a C/C++ data structure in C# from a byte array

将数据读入结构后,我需要将短变量转换为大端。 (反转字节)。

2 个答案:

答案 0 :(得分:0)

只需转换'短'即可。大/小端平台上相同的字节数组。

所以,只需阅读结构并执行以下操作:

data.F2 =((uint)data.F2>> 8)| (((uint)data.F2& 0xFF)<< 8);

data.CLENGTH =((uint)data.CLENGTH>> 8)| (((uint)data.CLENGTH& 0xFF)<< 8);

答案 1 :(得分:-2)

解决了自己。

结构很好,但如果你不打算修改任何数据类,最好使用。 我在c#中为c ++结构创建了类,对于大到小的endian转换,我创建了3个库函数,它对我有用。

让每个人都有宝贵的意见。