大小尾判斷和轉換

2021-06-05 12:55:29 字數 847 閱讀 8050

位元組存放有大尾和小尾之分。如果對應資料的高位元組存放在低位址就是大尾,反之,高位元組存放在高位址的就是小尾。

比如 short int a = 0x1234

大尾存放時:

偏移位址      存放內容

0x0000       0x12

0x0001       0x34

小尾存放:

偏移位址      存放內容

0x0000       0x34

0x0001       0x12

判斷乙個機器是大尾還是小尾我們可以通過程式進行測試(32位64為都可以):

#include

#include

int main(int argc, char* argv)

else if (*p == 0x12) else

return 0;

}在網路上傳輸資料我們採用的都是大尾。這就存在位元組順序的相互轉換。

下面定義乙個巨集可以對16位資料進行位元組轉換

#define sw16(x) \

((short)( \

(((short)(x) & (short)0x00ffu) << 8 ) | \

(((short)(x) & (short)0xff00u) >> 8 ) ))

假設這裡x=0xaabb

(short)(x) & (short)0x00ffu  這裡的與操作將16位資料x的高8位置為0得到0x00bb,然後在左移8位就得到了0xbb00

同理(short)(x) & (short)0xff00u >> 8 就得到了 0x00aa

最後將0xbb00 和 0x00aa 進行或運算就實現了高位元組和低位元組的相會交換。

大小端的判斷及轉換

大端模式 是指資料的高位元組儲存在記憶體的低位址中,而資料的低位元組儲存在記憶體的高位址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理 位址由小向大增加,而資料從高位往低位放 這和我們的閱讀習慣一致。小端模式 是指資料的高位元組儲存在記憶體的高位址中,而資料的低位元組儲存在記憶體的低位址中,這...

大小寫字母判斷和轉換

一 大小寫字母判斷 1.isalpha 標頭檔案 c include c語言 include 功能 判斷字元ch是否為英文本母。當ch為英文本母a z或a z時,返回非零值,但不一定是1 否則返回零。格式 isalpha ch 2.isupper 標頭檔案 c include c語言 include...

判斷大小端模式 聯合 強制型別轉換

資料0xf432 小端模式 x86的cpu在記憶體中儲存的是0x32,0xf4 大端模式 一些risc架構的處理器在記憶體中儲存的是0xf4,0x32 方法1 利用聯合的特點。聯合中的資料成員是共享儲存空間的,所分配的空間為資料成員最大所需的記憶體數。程式定義了endian un的聯合體,其中包含兩...