您的位置:首页 > 理论基础 > 计算机网络

网络IPC之字节序

2014-03-13 11:12 218 查看
运行在一台计算机上的进程相互通信时,一般不考虑字节序顺序。字节序是一个处理器架构特性,用于指示像整数这样的大数据类型内部字节顺序。

大端字节序,最大字节地址对应数字最低字节

小端字节序,最小字节地址对应最低字节

例如:

整数2139127808的二进制表示为01111111100000001000000000000000

01111111100000001000000000000000分为4个字节

由低到高依次是

00000000 十进制对应 0

10000000 十进制对应 128

10000000 十进制对应 128

01111111 十进制对应 127

如果将其付给一个32为整数,接着用一个字符指针强制转换到这个整数地址,

将看到字节序的不同。

#include <stdio.h>

main()
{
int i;
char *c;

i = 2139127808;
c=(char*)&i;
if (c[0] == 0 && c[3] == 127)
printf("小端字节序处理器\n");
else if (c[0] == 127 && c[3] == 0)
printf("大端字节序处理器\n");
}


TCP/IP协议栈采用大端字节序,所以应用程序有时需要在处理器字节序与网络字节序之间转换。

对于TCP/IP应用程序,提供了四个通用函数实施处理器字节序和网络字节序之间的转换

#include <arpa/inet.h>

uint32_t htonl(uint32_t hostlong);
返回值:以网络字节序表示的32位整型数
uint16_t htons(uint16_t hostshort);
返回值:以网络字节序表示的16位整型数
uint32_t ntohl(uint32_t netlong);
返回值:以主机字节序表示的32位整型数
uint16_t ntohs(uint16_t netshort);
返回值:以主机字节序表示的32位整型数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: