程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 字節序問題,字節序

字節序問題,字節序

編輯:關於C語言

字節序問題,字節序


  字節序由處理器決定,它分為兩大陣營,一方以Intel為代表,其處理器的字節序是小尾端模式,即低地址存儲數據的低位部分,高地址存儲數據的高位部分;另一方以IBM為代表,其處理器的字節序是大尾端模式,即低地址存儲數據的高位部分,高地址存儲數據的低位部分。可用以下的簡單代碼測試CPU的大小端,小段輸出0x78,大端0x12

#include <stdio.h>
int main()
{
    int i = 0x12345678;
    char *p = &i;
    printf("%x\n", p);
    return 0;
}

  結構體的位域成員變量

  為了節省空間,如果結構體有幾個成員變量的取值范圍很小,那麼可以考慮將它們合並在一個字節裡或一個short、int變量裡。使用一個類型超過一個字節的變量時,需要考慮字節序,那麼在結構體中使用位域時,需不需要考慮bit序呢?即一個整形變量內包含多個位域變量,各變量的bit順序是不是固定的呢?通過測試發現,各CPU體系結構的位域bit序跟其字節序大小端是一致的。

  

 網絡字節序

  TCP/IP協議規定,網絡數據流應采用大端字節序,即低地址高字節。如果主機是小端字節序,發送和接受都需要做轉換。同理,32位的IP地址也要考慮網絡字節序和主機字節序的問題。

  可用以下庫函數做網絡字節序和主機字節序的轉換,使網絡程序可移植:

#include <arpa/inet.h>

uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved