1. 程式人生 > >【C++】大端和小端的理解

【C++】大端和小端的理解

我的理解:

記憶體是以位元組為單位的,一個位元組是8位,也就是2位的16進位制,所以首先將資料轉成16進位制,比如下面例子中的0x12345678,就表示了4個位元組的資料。這裡要注意一點,如果將資料改成0x10,那麼這個還是4個位元組的資料,主要是位元組空間是由int所決定的,因此就需要將0x10改成0x00000010。

接著將16進位制的2個數一組(正好1個位元組)存放到記憶體中。

具體存放方式有不同機器決定,主要分為大端和小端。首先得記住所有的資料都是從最小位開始排列,比如0x12345678就先從78開始,接著56,34,12,原資料選取方式已經確定,在選取方式上不管大端小端都是一樣。接著就看這4個位元組的資料是從左邊(低位)開始存還是右邊(高位)開始存,如果從左邊開始78,56,34,12那就是小端;如果從右邊開始,那就是12,34,56,78這就是所謂的大端。

功能:從資料來源所在地址src開始,拷貝len個位元組到dest地址中。

#include <stdio.h>
#include <string.h>
void main()
{
    int n=0x12345678 ;
    char str[10];
    memcpy( str, &n, sizeof(int) );
    for( int i=0;i<sizeof(int);i++ ) //輸出顯示n在記憶體中的儲存情況,因機器不同,顯示有可能不同(大小端機)
        printf("%x\n", str[i]&0xff );
}

執行結果:

小端機:

78

56

34

12

大端機:

12

34

56

78