因為筆者不是資訊出身,所以對這種基本的資料存儲不是太熟,趁著這次研究資料處理的時候,仔細地做一次研究。
一切都是從0xFF開始的。
首先F代表著16進位,所以你看到FF,就是兩位數的16進位,換算成10進位,就是255。
所以FF=255。
再來要看資料的結構了,1/0這種機械碼,就是一個bit,每一個bit是0或1,8 bits就是1 byte。你把bit、byte、int之類的看成公斤公克之類的單位就知道了:
在資料傳輸時,會將真實的數值轉換成bytes,然後把每一位數拆開,收到資料的軟體再去把這些byte合起來。
比方說我們的真實數值可以由short來表示(short範圍: -65535~65535),由於short的格式是兩個byte,我們可以把它拆開成單純的byte,這應該是因為傳輸時不可能顧慮到資料的格式(int, string, UIView, NSString...),所以都用最基本的byte來傳輸。
拆的方法就是用0xFF和AND(&)以及>> (平移)。
AND這個邏輯運算是這樣:1 & 1 = 1,1 & 0 = 0。兩個都是1才會是1。
0xFF代表的十進位數值是255,如果以short表示,就是0000000011111111,最後8 bits是1。
所以任何的short數值,要怎麼分割開他兩個byte?
假設我今天要處理的short數值,已bit來表示,是長這樣:0011001110101010,那我第一次用AND取值:
耶!成功取出後面8個bits。
那前面八個呢?這時要用>>。
這表示你把每個bit往右移動8個位置,於是,前面8個bits就變成0了。
這時再AND:
就取出另一部分的byte了。
當你要處理 int格式的數值呢?這時0xFF就變成 00000000000000000000000011111111,因為是4 bytes的資料啊。所以0xFF是端看你要處理怎樣的資料而定。
一切都是從0xFF開始的。
首先F代表著16進位,所以你看到FF,就是兩位數的16進位,換算成10進位,就是255。
所以FF=255。
再來要看資料的結構了,1/0這種機械碼,就是一個bit,每一個bit是0或1,8 bits就是1 byte。你把bit、byte、int之類的看成公斤公克之類的單位就知道了:
1 byte = 8 bits
1 char = 1 byte
1 short = 2 byte
1 int = 4 byte
在資料傳輸時,會將真實的數值轉換成bytes,然後把每一位數拆開,收到資料的軟體再去把這些byte合起來。
比方說我們的真實數值可以由short來表示(short範圍: -65535~65535),由於short的格式是兩個byte,我們可以把它拆開成單純的byte,這應該是因為傳輸時不可能顧慮到資料的格式(int, string, UIView, NSString...),所以都用最基本的byte來傳輸。
拆的方法就是用0xFF和AND(&)以及>> (平移)。
AND這個邏輯運算是這樣:1 & 1 = 1,1 & 0 = 0。兩個都是1才會是1。
0xFF代表的十進位數值是255,如果以short表示,就是0000000011111111,最後8 bits是1。
所以任何的short數值,要怎麼分割開他兩個byte?
假設我今天要處理的short數值,已bit來表示,是長這樣:0011001110101010,那我第一次用AND取值:
0011001110101010 & 0000000011111111 = 0000000010101010
耶!成功取出後面8個bits。
那前面八個呢?這時要用>>。
0011001110101010 >> 8 = 0000000000110011
這表示你把每個bit往右移動8個位置,於是,前面8個bits就變成0了。
這時再AND:
0000000000110011 & 0000000011111111 = 0000000000110011
就取出另一部分的byte了。
當你要處理 int格式的數值呢?這時0xFF就變成 00000000000000000000000011111111,因為是4 bytes的資料啊。所以0xFF是端看你要處理怎樣的資料而定。
作者已經移除這則留言。
回覆刪除short 範圍應該是 -32768 ~ 32767
回覆刪除