网络字节序
来源:互联网 发布:windows系统占有率 编辑:程序博客网 时间:2024/06/10 21:59
字节序指计算机内存或网络传输中数据的存储顺序,对于多字节数据,当低位存储在低字节则称为“小端存储”,当低位存储在高位则称为大端存储。
如对四字节整数0x12345678:
数据在网络中传输时,首先需要将发送端的主机字节序转换为网路字节序,并在接收端将网络字节序转换成主机字节序。网络字节序都是大端存储,而主机字节序与CPU架构相关。
可以使用如下函数实现网络字节序到主机字节序的转换:
htons():主机字节序转换成网络字节序(h:host,n:network,s:short)
htonl():主机字节序转换成网络字节序 (h:host,n:network,l:long)
ntohs():网络字节序转换成本地字节序;
ntohl():网络字节序转换成本地字节序;
#include<stdio.h>#include<winsock.h>#pragma comment(lib, "ws2_32.lib")using namespace std;int main(){unsigned long a = 0x12345678;unsigned char*p = (unsigned char*)(&a);printf("%x,%x,%x,%x\n",p[0],p[1],p[2],p[3]);unsigned long b = htonl(a);//主机字节序->网络字节序p = (unsigned char*)(&b);printf("%x,%x,%x,%x\n",p[0],p[1],p[2],p[3]);unsigned long c = ntohl(b);p = (unsigned char*)(&c);//网络字节序->主机字节序printf("%x,%x,%x,%x\n",p[0],p[1],p[2],p[3]);return 0;}
事实上,当想计算机输入一串字节数时,当确定了数据的字节序,只要将字节重排即可得到
数据真实值:
/*大端字节序 */
i = (data[3]<<0)|(data[2]<<8)|(data[1]<<16)|(data[0]<<24);
/*小端字节序 */
i = (data[0]<<0)|(data[1]<<8)|(data[2]<<16)|(data[3]<<24);
参考:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms738557(v=vs.85).aspx
http://www.ruanyifeng.com/blog/2016/11/byte-order.html
0 0
- 关于网络字节序
- 网络数据包字节序
- 网络字节序
- 网络字节序
- 网络字节序
- 网络字节序
- 网络字节序
- 网络字节序
- 网络字节序
- 网络字节序转换
- 浅析网络字节序
- 网络字节序
- 网络字节序
- 网络字节序
- 网络字节序
- 网络字节序
- 网络字节序问题
- linux 网络字节序
- javaIO流中的字节字符流整理
- 视图
- 《精彩绝伦的CSS》——布局(三)遏制浮动
- 【查找算法】之折半查找
- GPIO配置
- 网络字节序
- tensorflow中tensor的理解
- ZOJ2388-Beat the Spread!
- 1231
- iOS隐藏电量等状态栏
- 性能优化
- Angular4学习笔记(二):绑定和分包
- @Responsebody与@RequestBody、@RequestMapping、@PathVariable
- Git如果修改已经注册的用户名和邮箱