我正在尝试解析JPEG文件。 This page表示格式如下:
0xFF +标记号(1个字节)+数据大小(2个字节)+数据(n个字节)
因此,当遇到0xFF
时,我将读取如下数据(s
是JPEG文件流):
int marker, size;
byte[] data;
//marker number (1 byte)
marker = s.ReadByte();
//size (2 bytes)
byte[] b = new byte[2];
s.Read(b, 0, 2);
size = BitConverter.ToInt16(b, 0);
问题是,
size
之后的值是-7937(这会导致下一行引发异常,因为我尝试允许使用-7937长的byte [])。 b[0] == 255
和b[1] == 224
。我怀疑我没有正确使用
BitConverter.ToInt16
,但是我找不到我做错了什么。BitConverter doc page表示“数组中的字节顺序必须反映计算机系统体系结构的字节序”,但是当我这样做时:
byte a = b[0]; b[0] = b[1]; b[1] = a;
size = BitConverter.ToInt16(b, 0);
...我得到的
size == -32
并没有真正好。有什么问题 ?
最佳答案
整数以Big Endian顺序存储在JPEG中。如果您使用的是小端系统(例如Intel),则需要反转长度字段中的字节顺序。长度字段是无符号的。
关于c# - 2字节到int的转换有什么问题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38849081/