我不确定Endian是不是正确的词,但是..
我一直在通过一个png文件进行解析,我注意到所有的整数值都是用big endian表示的。这是真的吗?
例如,宽度和高度作为32位无符号整数存储在png文件中。我的图像是16x16,在文件中存储为:
00 00 00 10
当它应该是:
10 00 00 00
这是真的还是我遗漏了什么?
是的,根据规范,整数必须按网络字节顺序(big endian):
所有需要超过一个字节的整数都应按网络字节顺序排列:最高有效字节先到,最低有效字节按显著性降序排列(两字节整数为msb lsb,四字节整数为msb b2 b1 lsb)。字节的最高位(值128)编号为位7;最低位(值1)编号为位0。除非另有说明,否则值是无符号的。显式标记为有符号的值用two的补码表示。 http://www.w3.org/TR/2003/REC-PNG-20031110/#7Integers-and-byte-order
所有需要超过一个字节的整数都应按网络字节顺序排列:最高有效字节先到,最低有效字节按显著性降序排列(两字节整数为msb lsb,四字节整数为msb b2 b1 lsb)。字节的最高位(值128)编号为位7;最低位(值1)编号为位0。除非另有说明,否则值是无符号的。显式标记为有符号的值用two的补码表示。
http://www.w3.org/TR/2003/REC-PNG-20031110/#7Integers-and-byte-order
PNG中的整数是按网络字节顺序(big endian)排列的。
见: the spec 。