大端和小端

- 大端法:高位保存在低地址中。
- 小端法:高位存放在高地址中,
程序判断大端法还是小端法
#include <stdio.h>
int main(int argc, char **argv)
{
union {
short s;
char c[sizeof(short)];
} un;
un.s = 0x0102;
if (sizeof(short) == 2)
{
if (un.c[0] == 1 && un.c[1] == 2)
printf("Big-Endian\n");
else if (un.c[0] == 2 && un.c[1] == 1)
printf("Little-Endian\n");
else
printf("not known\n");
}
else
{
printf("sizeof(short) = %d\n", sizeof(short));
}
}
- 大端和小端法对程序的影响
-
字节序不是由操作系统决定,而是由cpu架构决定的,比如 x86 的是小端序,而 PPC (PowerPC) 是big endian。 所以跑在 x86 上的 linux/windows 都是小端,而跑在 PPC 上的linux则是大端。
-
网络字节序为大端。
-
- 网络编程中常用的字节序转换函数有如下几个:
#include <<netinet/in.h>> uing16_t htons(uint16_t host16bitvalue); // 参数为16位主机字节序的值,返回值是16位网络字节序的值 uint32_t htonl(uint32_t host32bitvalue); // 参数为32位主机字节序的值,返回值是32位网络字节序的值 uint16_t ntohs(uint16_t net16bitvalue); // 参数为16位网络字节序的值,返回值是16位主机字节序的值 uint32_t ntohl(uint32_t net32bitvalue); // 参数为16位网络字节序的值,返回值是16位主机字节序的值
网友评论