我正在尝试解析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] == 255b[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/

10-11 22:35
查看更多