確切數據格式由所使用的協議所指定,但共同的方式來表示數字數據是:
無符號整數:這實際上是最簡單的。其典型的表示原則上與我們的正常十進制系統一樣工作,除了「數字」是字節,並且可以具有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