SOCKET 网络字节序与主机字节序及其相互转换
2013-12-02 13:04
232 查看
主机字节序:整数在内存中保存的顺序
两种方式:
Little endian 将低序字节存储在起始地址
Big endian 将高序字节存储在起始地址
网络字节序:整数在网络中的发送顺序
标准规定
Big endian 首先发送高位字节
字节序转换函数
htonl: 转换long类型到网络字节序
htons: 转换short类型到网络字节序
ntohl: 转换网络字节序到long类型
ntohs: 转换网络字节序到short类型
inet_addr: 将字符串格式IP转换到网络字节序
inet_ntoa: 将网络字节序格式IP转换到字符串
举例:SOCKADDR_IN中的数据格式
SOCKADDR_IN addr;
addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addr.sin_port = htons(5120);
addr.sin_family = AF_INET;
该结构体中的成员sin_addr, sin_port使用的是网络字节序
sin_addr:
inet_addr()返回的已经是网络字节序
127.0.0.1 --> 0x7F.00.00.01
-> 01 低位
00
00
7F 高位
sin_port:
5120(0x1400)在内存中的布局是
00 低位
14 高位
经过htons处理后
14 低位
00 高位
个人理解:重要的是标准
其实这个转换要解决的问题是网络上各个主机中数据类型的兼容问题。
假设有两个主机A和B,A主机采用了LE字节序,B主机采用了BE字节序,
那么整数0x12345678在A主机中的表示是
低位--------->高位
0x 78 56 34 12
如果不进行字节序变换A将这个数发给B主机时,B主机收到后在的数保存了内存布局,
将这个数解释为 0x78563412 就会出现错误
来源:http://blog.csdn.net/icedmilk/article/details/5336296
两种方式:
Little endian 将低序字节存储在起始地址
Big endian 将高序字节存储在起始地址
网络字节序:整数在网络中的发送顺序
标准规定
Big endian 首先发送高位字节
字节序转换函数
htonl: 转换long类型到网络字节序
htons: 转换short类型到网络字节序
ntohl: 转换网络字节序到long类型
ntohs: 转换网络字节序到short类型
inet_addr: 将字符串格式IP转换到网络字节序
inet_ntoa: 将网络字节序格式IP转换到字符串
举例:SOCKADDR_IN中的数据格式
SOCKADDR_IN addr;
addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addr.sin_port = htons(5120);
addr.sin_family = AF_INET;
该结构体中的成员sin_addr, sin_port使用的是网络字节序
sin_addr:
inet_addr()返回的已经是网络字节序
127.0.0.1 --> 0x7F.00.00.01
-> 01 低位
00
00
7F 高位
sin_port:
5120(0x1400)在内存中的布局是
00 低位
14 高位
经过htons处理后
14 低位
00 高位
个人理解:重要的是标准
其实这个转换要解决的问题是网络上各个主机中数据类型的兼容问题。
假设有两个主机A和B,A主机采用了LE字节序,B主机采用了BE字节序,
那么整数0x12345678在A主机中的表示是
低位--------->高位
0x 78 56 34 12
如果不进行字节序变换A将这个数发给B主机时,B主机收到后在的数保存了内存布局,
将这个数解释为 0x78563412 就会出现错误
来源:http://blog.csdn.net/icedmilk/article/details/5336296
相关文章推荐
- SOCKET 网络字节序与主机字节序及其相互转换
- Python Network Programming(4)---主机字节序与网络字节序之间的相互转换
- API SOCKET基础(三)网络字节序与主机字节序的转换
- Python网络编程——主机字节序和网络字节序之间的相互转换
- 网络字节序 主机字节序 点分十进制ip 相互转换
- API SOCKET基础(4)网络字节序与主机字节序的转换
- API SOCKET基础(三)网络字节序与主机字节序的转换
- python通过ntohl和htonl等函数实现主机字节序和网络字节序相互转换
- 网络字节序与主机字节序相互转换
- 处理对象的多种状态及其相互转换——状态模式(六)
- 网络字节序与主机字节序的转换
- 求助:提取收到的ip报文中内容时,网络字节序到主机字节序的转换问题
- 网络字节序 主机字节序 转换
- 网络字节序与主机字节序 和它们之间的相互转换函数
- 处理对象的多种状态及其相互转换——状态模式(三)
- 网络字节序与主机字节序的转换
- 网络字节序与主机字节序的转换
- 处理对象的多种状态及其相互转换——状态模式(State Pattern)
- 纵表和横表的概念及其相互转换
- Android中system.img的两种格式及其相互转换方法