确切数据格式由所使用的协议所指定,但共同的方式来表示数字数据是:
无符号整数:这实际上是最简单的。其典型的表示原则上与我们的正常十进制系统一样工作,除了“数字”是字节,并且可以具有256个不同的值。
如果你看看像3127这样的十进制数,你会看到三位数字。最不重要的数字是最后一个数字(在这种情况下是7)。最不重要的意思是,如果您将其更改为1,您将获得最小的值更改(即1)。示例中最重要的数字是最左边的数字3:如果您将该数字更改为1,则会对数值进行最大更改,即更改为1000.由于有10个不同的数字(0到9),因此,由“3127”表示的数字是3 * 10 * 10 * 10 + 1 * 10 * 10 + 2 * 10 + 7。请注意,itz只是最重要的数字第一位的约定;你也可以定义最低有效位数字先出现,然后这个数字将被写为“7213”。
现在在大多数编码中,无符号数字的工作原理完全相同,除了“数字”是字节,因此而不是基数为10的基数为256.此外,与十进制数不同,重要字节(MSB)或最低有效字节(LSB)首先出现;两种约定都以不同的协议或文件格式使用。例如,在MSB优先(也称为big-endian编码)的4字节(即32位)无符号整数中,值1000 = 0 * 256^3 + 0 * 256^2 + 3 * 256 + 232将由四个字节值0, 0, 3, 232
或十六进制00 00 03 E8
表示。对于little-endian编码(首先是LSB),代之以。而作为16位整数,它只是03 E8
(大端)或E8 03
(小端)。
对于有符号整数,最常用的表示形式是二进制补码。基本上这意味着如果最高有效位是1(即最高有效字节是128或更大),则字节序列不会像上面所写的那样对数字进行编码,而是通过减去2 ^(位)从它开始,其中(位)是数字中的位数。例如,在一个有符号的16位int中,序列FF FF
不是65535,因为它将在16位无符号整型中,而是65535-2^16 = -1。与未签名的整数一样,您必须区分大端和小端。例如,-3将是16位位端的FF FD
,而16位的小端是FD FF
。
浮点比较复杂一点,今天通常使用IEEE/IEC规定的格式。基本上,浮点数的形式是符号*(1.mantissa)* 2 ^指数,符号,尾数和指数存储在不同的子域中。再次,有小端和大端形式。
“十六进制字符串”只是“原始”。相反,它是原始二进制数据的十六进制*表示*。阅读[float format](http://en.wikipedia.org/wiki/Single-precision_floating-point_format)了解它如何适合四个字节。 – 2012-01-10 22:33:20