【发布时间】:2013-12-24 18:29:56
【问题描述】:
我正在尝试从 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,因此输入相同输出不同。 为什么?
注意事项:
- Substring(2,4) 相当于 Python 中的“切片”字符串 [2:6]
- 访问 http://docs.python.org/2/library/struct.html#format-characters 获取格式字符(用于 Python 中的打包/解包)
【问题讨论】:
标签: c# python unpack binaryreader