ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
假如变量x类型为int,位于地址`0x100`处,有一个十六进制值为`0x01234567`,地址范围为`0x100~0x103`的字节顺序依赖于机器的类型。 ## 大端模式`Big-endian` 大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。 ``` /* * |---------------------------------------| |Big-endian | |---------------------------------------| | buf | 0x100 | 0x101 | 0x102 | 0x103| |---------------------------------------| | ... | 01 | 23 | 45 | 76 | |---------------------------------------| * */ ``` ## 小端模式`Little-endian` 小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。 ``` /* * |---------------------------------------| |Little-endian | |---------------------------------------| | buf | 0x100 | 0x101 | 0x102 | 0x103| |---------------------------------------| | ... | 67 | 45 | 23 | 01 | |---------------------------------------| * */ ``` ``` #include <stdio.h> typedef unsigned char *byte_pointer; //void show_bytes(byte_pointer start, int len); void show_bytes(byte_pointer start, int len) { int i; for (i = 0; i < len; i++) { printf( " %.2x",start[i]); printf("\n"); } } int main() { int val = 0x12345678; byte_pointer valp = (byte_pointer)&val; show_bytes(valp,1); // 78 show_bytes(valp,2); // 78 56 show_bytes(valp,3); // 78 56 34 return 1; } ``` ![](https://img.kancloud.cn/48/cb/48cb19e92e21651ec4f5d22ed121ee6f_573x93.png)