网络IPC之字节序
2014-03-13 11:12
218 查看
运行在一台计算机上的进程相互通信时,一般不考虑字节序顺序。字节序是一个处理器架构特性,用于指示像整数这样的大数据类型内部字节顺序。
大端字节序,最大字节地址对应数字最低字节
小端字节序,最小字节地址对应最低字节
例如:
整数2139127808的二进制表示为01111111100000001000000000000000
01111111100000001000000000000000分为4个字节
由低到高依次是
00000000 十进制对应 0
10000000 十进制对应 128
10000000 十进制对应 128
01111111 十进制对应 127
如果将其付给一个32为整数,接着用一个字符指针强制转换到这个整数地址,
将看到字节序的不同。
TCP/IP协议栈采用大端字节序,所以应用程序有时需要在处理器字节序与网络字节序之间转换。
对于TCP/IP应用程序,提供了四个通用函数实施处理器字节序和网络字节序之间的转换
大端字节序,最大字节地址对应数字最低字节
小端字节序,最小字节地址对应最低字节
例如:
整数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位整型数
相关文章推荐
- Linux/Unix IO多路复用之select网络编程(含源码)
- nginx https
- android网络开源框架volley(四)——谈谈图片加载续——九张图片相册的展示(微信微博等)
- ASIHTTPRequest详细介绍,使用方法
- 网络带宽计算
- socket 网络编程(2)UDP部分
- 五款好玩又好用的Linux网络测试和监控工具
- IOS---网络以及框架ASIHTTPRequest入门学习
- wifi万能钥匙破解的密码查看方式
- 网络IPC之套接字
- Tomcat能启动和停止,但是输入http://localhost:8080/不能显示页面
- 转于博客http://blog.sina.com.cn/zilingerenen,java的断言
- 同步HTTP请求也很温柔
- JAVA的网络编程【转】
- SOCKET 网络编程(1) TCP部分
- ajax中值得注意的地方
- 卷积神经网络小结(Convolutional Neural Networks)
- 单片机联网需求攀升 全硬件TCP/IP技术有招
- 【Android Developers Training】 79. 连接到网络
- 几种网络负载均衡方法比较