1. 程式人生 > 其它 >《C語言筆記:大小端模式》

《C語言筆記:大小端模式》

技術標籤:指標嵌入式串列埠通訊c語言linux

一,計算機儲存系統的大小端

  1,大端模式:高地址存放高位元組資料,低地址存放低位元組資料。

  2,小端模式:高地址存放低位元組資料,低地址存放高位元組資料。

  3,圖示:32位系統

  4,兩種判斷計算機大小端模式的辦法

#include<stdio.h>

union myunion
{
    int a;
    char b;
};

int main(void)
{
    union myunion un;
    //unsigned int c = 1;
    unsigned int c = 0x12345678;
    char *p = (char *)&c;

    //方式一:通過聯合體的元素共用記憶體的特質來判別大小端模式
    un.a = 1;

    if(un.b)
    {
        printf("  小端模式  \n");
    }
    else
    {
        printf("  大端模式  \n");
    }

    //方式二:通過指標的方式判斷
    printf("  *p = 0x%x  \n",*p);
    if(*p)
    {
        printf("  小端模式    \n");
    }
    else
    {
        printf("  大端模式    \n");
    }
        

}

二,通訊系統的大小端問題

  1,比如說要通過一個串列埠傳送一個0x12345678給接收方,但是由於串列埠限制,只能以位元組為單位傳送,那麼久需要傳送四次,接收方分四次接收,內容分別是0x12、0x34、 0x56、 0x78。接收方收到這四個位元組後需要去重組得到0x12345678而不是得到0x78563412。

  2,所以通訊雙方需要有一個默契,那就是相互通訊之前就規定好,是先發/接收高位還是先發低位/接收。這便是通訊中的大小端問題。

  3,一般來說,先發高位元組的叫做大端模式,先發低位元組的叫做小端模式。但也不一定,可以通訊雙方相互約定。