← Back to list

[C] 判斷Big-Endian or Little-Endian

Samuel Liu · 2021-09-26 08:36 · 16 claps · 2.2 min read
#c #endian
Open on Medium ↗

[C] 判斷Big-Endian or Little-Endian

在現今主流的 CPU 中,最常見的位元組順序有兩種,分別是 Big-Endian 與 Little-Endian,Big-Endian 是指資料放進記憶體中的時候,最高位的位元組會放在最低的記憶體位址上,而 Little-Endian 則是剛好相反,它會把最高位的位元組放在最高的記憶體位址上。

我們直接以一個簡單的範例來說明 Big-Endian 與 Little-Endian 的差異會更清楚,假設我們有一個 32 位元(bits)的整數資料為 0x12345678,在 Big-Endian 的機器將其放置在記憶體中的時候,會按照下圖中的規則放置:

但是如果換成 Little-Endian 的機器,將 0x12345678 放在記憶體中的方式就會剛好相反,會變成這樣:

C 語言判斷位元組順序

如果我們的程式會使用 union 這類的低階存取方式處理記憶體中的資料,位元組順序就會是非常關鍵的問題,如果不確定自己的機器是屬於那一種位元組順序,可以使用以下這段簡單的程式來判斷:

#include <stdio.h>
int main() {
    typedef union {
        unsigned int i;
        unsigned char c[4];
    } EndianTest;
    EndianTest t;
    t.i = 0x12345678;
    if(t.c[0] == 0x12 && t.c[1] == 0x34 && t.c[2] == 0x56 && t.c[3] == 0x78){
        printf("Big Endian!!");
    }else if(t.c[0] == 0x78 && t.c[1] == 0x56 && t.c[2] == 0x34 && t.c[3] == 0x12){
        printf("Little Endian!!");
    }else{
        printf("Other Endian!!");
    }

    return 0;
}

output (Intel CPU):

Little Endian!!

Reference: https://blog.gtwang.org/programming/difference-between-big-endian-and-little-endian-implementation-in-c/


메타데이터
post_id
d90da2a95086
slug
c-判斷big-endian-or-little-endian-d90da2a95086
url
https://medium.com/@samuel830209/c-%E5%88%A4%E6%96%B7big-endian-or-little-endian-d90da2a95086
canonical_url
https://medium.com/@samuel830209/c-%E5%88%A4%E6%96%B7big-endian-or-little-endian-d90da2a95086
author_url
https://medium.com/@samuel830209
status
ok
fetched_at
2026-07-27 23:07:57