什么是大端 / 小端?
大端(存储)模式,是指低位保存在高地址,高位保存在低地址中
小端(存储)模式,是指低位保存在低地址中,而高位保存在高地址中
判断大小端方法
1.定义变量int i=1;将 i 的地址拿到,强转成char*型,这时候就取到了 i 的低地址,这时候如果是1就是小端存储,如果是0就是大端存储。
void judge_bigend_littleend2()
{
int i = 1;
char c = (*(char*)&i);
if (c)
printf("小端\n");
else
printf("大端\n");
}
2.定义联合体,一个成员是多字节,一个是单字节,给多字节的成员赋一个最低一个字节不为0,其他字节为0 的值,再用第二个成员来判断,如果第二个字节不为0,就是小端,若为0,就是大端。
void judge_bigend_littleend3()
{
union
{
int i;
char c;
}un;
un.i = 1;
if (un.c == 1)
printf("小端\n");
else
printf("大端\n");
}
大小端转换函数:
ntohs():将一个16位数由网络字节顺序(大端)转换为主机字节顺序(小端)
ntohl():将一个无符号长整形数从网络字节顺序转换为主机字节顺序
htonl(): 将主机数转换成无符号长整型的网络字节顺序(32位)
htons(): 将整型变量从主机字节顺序转变成网络字节顺序(16位)
https://blog.csdn.net/qq_36391130/article/details/81944217