今天在网上看见有人讨论big endian和little endian的问题,觉得以下是正确的,并编程验证:
Big endian machine: It thinks the first byte it reads is the biggest.
Little endian machine: It thinks the first byte it reads is the littlest.
举个例子,从内存地址0x0000开始有以下数据:
0x0000 0x12
0x0001 0x34
0x0002 0xab
0x0003 0xcd
如果我们去读取一个地址为0x0000的四个字节变量,若字节序为big-endian,则读出
结果为0x1234abcd;若字节序位little-endian,则读出结果为0xcdab3412.
如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为
big-endian little-endian
0x0000 0x12 0xcd
0x0001 0x34 0xab
0x0002 0xab 0x34
0x0003 0xcd 0x12
x86系列CPU都是little-endian的字节序.
以下是验证:
#include #include int main(int argc, char **argv) { if(G_BYTE_ORDER == G_LITTLE_ENDIAN) { printf("the pc you use is in little mode!\n"); } else { printf("the pc you use is in big mode!\n"); } int a = 0x12345678; printf("%x's big mode is %x\n", a, GINT_TO_BE(a)); printf("%x's little mode is %x\n", a, a); return 0; } |
以下是结果:
the pc you use is in little mode! 12345678's big mode is 78563412 12345678's little mode is 12345678 |
阅读(1608) | 评论(2) | 转发(0) |