位元組存放有大尾和小尾之分。如果對應資料的高位元組存放在低位址就是大尾,反之,高位元組存放在高位址的就是小尾。
比如 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的聯合體,其中包含兩...