我正在尝试从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 ,因此输入相同,输出不同。的 为什么?
注意:
答案 0 :(得分:2)
我认为这是endianness问题,例如尝试
Int16 x1 = 4096;
var x2 = IPAddress.HostToNetworkOrder(x1);
x2 16 ( 24576 => 96 相同)
因此,您可以使用IPAddress.HostToNetworkOrder
方法。