跨平台网络数据传输过程中的主机字节顺序和网络字节顺序

本文探讨了在网络编程中为何需要进行主机字节顺序到网络字节顺序的转换,介绍了大端和小端的概念,并通过实例解释了如何在小端机和大端机之间正确地进行数据传输,确保数据一致性。
摘要由CSDN通过智能技术生成

首先抛出一个经典问题:为什么在网络编程中需要字节序的转换?比如用htons()来把端口从主机字节顺序转换成网络字节顺序。比如在编写网络底层库的时候,序列化网络数据 和 反序列化网络数据时也要进行字节转换。(序列化网络数据就是发送方组织一连串的数据发送给接收方,在组织过程中要对short 和 int 等多字节类型的变量用htons htonl进行字节序转换,这串数据中有int short 字符串等类型. 反序列化网络数据就是接收方在读取数据时,比如在读取short或者int时,要用ntohs 或者ntohl进行字节序转换)

 

在回答这个问题之前先介绍下基础部分:

大端和小端:

大端:在低地址存放高字节,在高地址存放低字节

小端:在低地址存放低字节,在高地址存放高字节

 

注意:地址是左边是低地址,右边是高地址,字节是左边是高字节,右边是低字节。采用大端法存储变量和采用小端法存储变量是根据CPU来决定的。intel的CPU一般采用的是小端法.

 

比如:short a = 0x1234(两个16进制数字代表一个字节,所以0x12是个字节  0x34是个字节,如果不知道的人你的基础确实太那个什么了) 

如果CPU在0x00000000这个地址用大端法存储这个a,则在内存中0x00000000处存储的是0x12 ,在内存0x00000001处存储的是0x34.

如果CPU在0x00000000这个地址用小端法存储这个a,则在内存中0x00000000处存储的是0x34,在内存0x00000001处存储的是0x12

 

API:htons htonl ntohs ntohl这四个API就是用来进行字节序的转换的,

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值