语言之间的方法差异(Python-> C#)

时间:2013-12-24 18:29:57

标签: c# python unpack binaryreader

我正在尝试从C#中的Python程序重现一系列代码。在Python中我有:

element1, element2 = struct.unpack('!hh', data[2:6])

上述语句以短 - 短(网络字节顺序)格式从数据的“子字符串”解包。结果值(element1,element2)为: 96 16

我在C#中的尝试是:

byte[] bytesOfInterval = ASCIIEncoding.ASCII.GetBytes (data.Substring (2, 4));
using (MemoryStream stream = new MemoryStream(bytesOfInterval)) {
    using (BinaryReader reader = new BinaryReader(stream)) {
        Logger.Trace (reader.ReadInt16().ToString());
        Logger.Trace (reader.ReadInt16().ToString());
    }
}

输出: 24576 4096

正如您所看到的,Python程序的输出与C#的输出略有不同。为了验证“子串”(输入),我用十六进制格式对它们进行编码,看看是否有任何区别。它们都等于 00600010 ,因此输入相同,输出不同。的 为什么?

注意:

1 个答案:

答案 0 :(得分:2)

我认为这是endianness问题,例如尝试

Int16 x1 = 4096;  
var x2 = IPAddress.HostToNetworkOrder(x1);

x2 16 24576 => 96 相同)

因此,您可以使用IPAddress.HostToNetworkOrder方法。