位元組序 小端和大端

2021-09-24 21:57:56 字數 1426 閱讀 8892

1.小端和大端(一)

小端:在最小記憶體位址,先儲存最低有效位元組。

大端:在最小記憶體位址,先儲存最高有效位元組。

例項:乙個4位元組整數:s = 0x03020100;

備註:參考《linux/unix系統程式設計手冊》。

2.小端和大端(二)

小端(little-endian)位元組序:低序位元組儲存在起始位址;

大端(big-endian)位元組序:高序位元組儲存在起始位址。

《unix網路程式設計卷1》中有句話,非常精闢。

術語「小端」和「大端」表示多個位元組值的哪一端(小端——低序位元組或大端——高序位元組)儲存在該值的起始位址。

《unix網路程式設計卷1》中有乙個例項**,結合它,我們可以更好理解小端和大端。

#include "unp.h"

int main(int argc, char **ar**)

un;un.s = 0x0102;

printf("%s: ", cpu_vendor_os);

if (sizeof(short) == 2) else

printf("sizeof(short) = %d\n", sizeof(short));

exit(0);

}

3.主機位元組序和網路位元組序之間的轉換函式網際協議使用大端位元組序來傳送這些多位元組整數。套接字位址結構中的某些字段必須按照網路位元組序進行維護。因此我們要關注如何在主機位元組序網路位元組序之間相互轉換。我們使用到4個函式:

#include uint16_t htons(uint16_t host16bitvalue);

uint32_t htonl(uint32_t host32bitvalue);

both return: value in network byte order

uint16_t ntohs(uint16_t net16bitvalue);

uint32_t ntohl(uint32_t net32bitvalue);

both return: value in host byte order

上述函式名中:

h--host

n--network

s--short

l--long

當使用這些函式時,我們並不關心主機位元組序和網路位元組序的實際值(究竟是大端還是小端)。我們所要做的只是呼叫適當的函式在主機和網路位元組序之間轉換某個給定值。

大端位元組序和小端位元組序

簡單介紹 位元組序是由cpu和os對多位元組變數的記憶體儲存順序不同而產生的 小端位元組序 在表示變數的記憶體位址的起始位址存放低位元組,高位元組順序存放 大端位元組序 在表示變數的記憶體位址的起始位址存放高位元組,低位元組順序存放,例如 變數的值0xabcd uint32 t htonl 主機位元...

大端位元組序和小端位元組序

title 大端位元組序和小端位元組序 格列佛遊記 中記載了兩個征戰的強國,你不會想到的是,他們打仗竟然和剝雞蛋的姿勢有關。很多人認為,剝雞蛋時應該打破雞蛋較大的一端,這群人被稱作 大端 big endian 派 可是當今皇帝的祖父小時候吃雞蛋的時候碰巧將乙個手指弄破了。所以,他的父親 當時的皇帝 ...

大端位元組序和小端位元組序

計算機硬體有兩種儲存資料的方式 大端位元組序 big endian 和小端位元組序 little endian 舉例來說,數值0x2211使用兩個位元組 一位元組是8bit 儲存 高位位元組是0x22,低位位元組是0x11。大端位元組序 低位位元組在高位址,高位位元組低位址上。這是人類讀寫數值的方法...