网络IPC之字节序

来源:互联网 发布:淘宝上如何购买香烟 编辑:程序博客网 时间:2024/04/29 23:15
运行在一台计算机上的进程相互通信时,一般不考虑字节序顺序。字节序是一个处理器架构特性,用于指示像整数这样的大数据类型内部字节顺序。

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

例如:
整数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位整型数



0 0