大小端判断函数
基本概念
-
高位(Most Significant Byte, MSB):
- 高位是指在一个多字节数中表示数值的最大部分的字节。
- 在
0x01020304
中,最高有效字节是01
,这是整个数值中最有影响的部分。
-
低位(Least Significant Byte, LSB):
- 低位是指在一个多字节数中表示数值的最小部分的字节。
- 在
0x01020304
中,最低有效字节是04
,这是整个数值中影响最小的部分。
小端(Little-Endian):
- 在小端存储中,低序号的字节存储数据的最低有效部分。即,数值的最低有效字节(Least Significant Byte, LSB)放在内存的低地址处,而最高有效字节(Most Significant Byte, MSB)则放在高地址处。
- 例如,对于
0x01020304
,在小端模式下存储为:
地址: | 0x00 | 0x01 | 0x02 | 0x03 |
数据: | 0x04 | 0x03 | 0x02 | 0x01 |
大端(Big-Endian):
- 在大端存储中,低序号的字节存储数据的最高有效部分。即,数值的最高有效字节放在内存的低地址处,而最低有效字节放在高地址处。
- 例如,对于
0x01020304
,在大端模式下存储为:
地址: | 0x00 | 0x01 | 0x02 | 0x03 |
数据: | 0x01 | 0x02 | 0x03 | 0x04 |
#include <stdio.h>
#include <stdint.h>
int is_little_endian(void)
{
const uint32_t value = 0x01020304;
const uint8_t *byte_ptr = (const uint8_t *)&value;
return (byte_ptr[0] == 0x04) ? 1 : 0;
}
int main(void)
{
if( is_little_endian() ) {
printf("litte endian!\n");
} else {
printf("big endian!\n");
}
return 0;
}