大端小端模式判断
介绍
小端模式(Little Endian) : 变量的高字节放在内存的高地址中,变量的低字节放在内存的低地址中
大端模式(Big Endian):变量的高字节放在内存的低地址中,变量的低字节放在内存的高地址中(采用大端方式进行数据存放符合人类的正常思维)
举例子:
对于int类型变量x=0x30313233;
大端模式存放,内存低地址到高地址为: 0x30、0x31、0x32、0x33;
小端模式存放,内存低地址到高地址为:0x33,0x32,0x31,0x30;
代码判断:
# include <stdio.h>
int main ( ) {
// 使用共用体union
union {
int a;
char b;
} UN;
UN.a = 1;
/* 对于union低地址对齐,若 ina a = 1(0x00000001),
内存从小到大依次放的是:0x01 0x00 0x00 0x00
按照 char* 方式存取,取得 b为0x01 时,为小端模式
*/
if (UN.b == 1){
printf("小端模式\n");
} else{
printf("大端模式\n");
}
return 0;
}
机器使用endian模式:
x86(win7等),ARM,DSP,主机都为小端模式
网络字节序采用 大端模式
在网络编程中,字节序转换一般使用 <arpa/inet.h>
中的转换函数:
- uint32_t htonl(uint32_t hostlong); /*主机字节序到网络字节序的长整型转换*/
- uint16_t htons(uint16_t hostshort); /*主机字节序到网络字节序的短整型转换*/
- uint32_t ntohl(uint32_t netlong); /*网络字节序到主机字节序的长整型转换*/
- uint16_t ntohs(uint16_t netshort); /*网络字节序到主机字节序的短整型转换*/