Linux網路程式設計 位元組序

2021-09-07 12:06:12 字數 1526 閱讀 3913

1 .談到位元組序,那麼會有朋友問什麼是位元組序

非常easy:【比如乙個16位的整數。由2個位元組組成,8位為一位元組,有的系統會將高位元組放在記憶體低的位址上,有的則將低位元組放在記憶體高的位址上,所以存在位元組序的問題。】

2 .那麼什麼是高位元組、低位元組?

也相當簡單:【乙個16進製制整數有兩個位元組組成,比如:0xa9。

高位元組就是指16進製制數的前8位(權重高的8位),如上例中的a。

低位元組就是指16進製制數的後8位(權重低的8位),如上例中的9。

】 大於乙個位元組的變數型別一般有兩種表示方法:

比如:變數0xabcd在大端位元組序和小端位元組型系統中表示方法如圖

我們用**驗證一下我們自己的系統是小端還是大端吧

/* 聯合型別的變數型別。用於測試位元組序

* 成員value的高低端位元組能夠由成員type按位元組訪問

*/typedef unionto;

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

/* 大端位元組序檢查 */

if(typeorder.byte[0] == 0xab && typeorder.byte[1]==0xcd)

return

0;

}3 .位元組序轉換函式介紹

位元組序轉換函式的使用:

#include 

/* 聯合型別的變數型別,用於測試位元組序

* 成員value的高低端位元組能夠由成員type按位元組訪問

*//* 16位 */

typedef unionto16;

/* 32位 */

typedef unionto32;

#define bits16 16 /*16位*/

#define bits32 32 /*32位*/

/* 依照位元組列印,begin為位元組開始,

* flag為bits16表示16位,

* flag為bits32表示32位。

*/void showvalue(unsigned char *begin, int flag)

else

if(flag == bits32)

for(i = 0; i< num; i++)

printf("\n");

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

Linux網路程式設計 位元組序

與同一臺計算機上的程序進行通訊時,一般不用考慮位元組序,位元組序是乙個處理器架構特性,用於指示像整數計算的大資料型別內部的位元組如何排序。假設上圖圖 中在記憶體 0x1000 到 0x1003 這連續的 4 個位元組儲存了資料,這段資料對應的資料型別是 int 型別。我們知道 int 型別的資料在大...

Linux網路程式設計 主機位元組序 與 網路位元組序

網域名稱轉換ip位址 首先需要理解大端模式與小端模式這兩個點 這兩種模式代表著資料在記憶體中是如何存放的,我們直到,乙個位元組能夠存放8位,如果是超過8位的資料該怎樣存放呢?如需要存放資料 0x12345678 不難看出,大端模式也就是高位優先存放,小端模式也就是低位優先存放。下面學習兩類函式 ht...

網路程式設計 位元組序

三 位址形式的轉換函式 當儲存多位元組資料時,就涉及到位元組序的概念。高位位元組儲存在低位址為大端對齊,低位位元組儲存在低位址為小端對齊。判斷系統為大端對齊還是小端對齊的方法 include typedef union data intmain int argc,char ar else if ob...