我试图解析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长字节[])。 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
并不是更好。
问题是什么?
答案 0 :(得分:1)
整数以JPEG格式存储在Big Endian中。如果您使用的是小端系统(例如Intel),则需要反转长度字段中字节的顺序。长度字段是无符号的。
答案 1 :(得分:1)
有问题的数据是unsigned int。使用uint
类型和BitConverter.ToUInt16
修复了它。