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...