大小端模式与网络编程?

一直对这方面不大懂,eg:0x0102 存储地址为1和2则一般来说内存里:1 --- 0x02、2 --- 0x01网络通信中:1 --- 0x01、2 --- 0x02请问,当通过socket发送数据的时候,数据是0x0201还是0x0102?接收到的又是怎样的呢?
2026年09月24日 01:39
有2个网友回答
网友(1):

网络传输中采用的大端标记法,也就是说先传比较高权值的数字, 就像 12一样,先传10,在传2,就算丢了后面一个,损失也不是太大。

小端就跟机器有关了。你在封装一个int之类的数字,封装进去之后就应该是大端的了,可以调用里面的 htons() 或者htonl()函数来转化成大端的(当然你也可以自己按照大端的方式封装,就会麻烦一点而已)。传输过程中当然也是大端的,接受到的buffer里面当然也是大端的,但是你在读取这个int类型的时候,就需要相应的将大端转化为小端了(采用ntohs() 函数或ntohl()函数来实现),这样你读取到的就是原来的数字。

可想而知,假如你用机器A和B通信,而且A和B的端序都是一样的话,中间自然就不用转换来转换去了。但是这不是好习惯,因为假如移植到另外端序的机器的话就需要修改代码。所以最好还是用那几个函数。

网友(2):

0x0102,网络通信规定 字续用“大端”