网络字节序
来源:互联网 发布:拍水下婚纱价格知乎 编辑:程序博客网 时间:2024/05/16 12:27
1、字节序:分为大端字节序和小段字节序
a、大端字节序(Big Endian)
最高有效位(MSB:Most Significant Bit)存储于最低内存地址处,最低有效位(LSB:Lowest Significant Bit)存储于最高内存地址处。
例如:数据16进制数据:0x12345678,在内存中存放形式如下: 12 34 56 78
(其中 0x12为高位数据 。。。。0x78为低位数据)
b、小端字节序(Little Endian)
最高有效位(MSB:Most Significant Bit)存储于最高内存地址处,最低有效位(LSB:Lowest Significant Bit)存储于最低内存地址处。
例如:数据16进制数据:0x12345678,在内存中存放形式如下: 78 56 34 12
(其中 0x12为高位数据 。。。。0x78为低位数据)
2、主机字节序
不同的主机有不同的字节序,如x86为小端字节序,Motorola 6800为大端字节序,ARM字节序是可配置的。
3、 网络字节序
网络字节序规定为大端字节序
如何验证x86平台下的字节序?
代码如下:
//file:01byteorder
#include<stdio.h>
#include<arpa/inet.h>
int main()
{
unsigned int x=0x12345678;
unsigned char *p=(unsigned char*)&x;
printf("x86字节序:");
printf("%0x %0x %0x %0x\n",p[0],p[1],p[2],p[3]);
unsigned int y=htonl(x);
printf("主机字节序->网络字节序:");
p=(unsigned char*)&y;
printf("%0x %0x %0x %0x\n",p[0],p[1],p[2],p[3]);
unsigned int z=ntohl(y);
printf("网络字节序->主机字节序:");
p=(unsigned char*)&z;
printf("%0x %0x %0x %0x\n",p[0],p[1],p[2],p[3]);
return 0;
}
则我们的预期目标是:78 56 34 12 ,那么x86为小端字节序:
综上所属:不同的硬件平台字节序是不一样的,这就需要字节序的转化
例如:电脑A和手机B进行通信,则需要如下转化
A端:主机字节序->网络字节序(小端字节序->大端字节序)
B端:网络字节序->主机自字节序(大端字节序->大端字节序)
- 关于网络字节序
- 网络数据包字节序
- 网络字节序
- 网络字节序
- 网络字节序
- 网络字节序
- 网络字节序
- 网络字节序
- 网络字节序
- 网络字节序转换
- 浅析网络字节序
- 网络字节序
- 网络字节序
- 网络字节序
- 网络字节序
- 网络字节序
- 网络字节序问题
- linux 网络字节序
- 动态代理模式
- 4.1 指针和链式结构
- C++中堆和栈内存分配
- MyElcipse 10.7集成EXT(spket)
- 4.2 链栈
- 网络字节序
- 属性声明(ID的使用)
- 4.3 带保护的链栈
- 1063. Set Similarity (25)
- 安装Qt Creator
- 作业六
- 作业5
- Leetcode rotate list
- 属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那种情况下用?