什么时候需要高低字节序转换,即ntohs()函数

什么时候需要高低字节序转换,即ntohs()函数,第1张

ntohs()

网络字节序->主机字节序

网络字节序规定了数据在网络中传输的字节顺序,各主机再根据自身的环境将网络字节序转换成适应自身的主机字节序。

数值:0x1245

在X86系统中这样存储

内存地址 数据

00 12

01 45

发送时从低地址读取数据

所以发送顺序为 12 45

而在其它系统中有可能这样存储:

内存地址 数据

00 45

01 12

如果不转换为网络字节序,按 45 12发送,则X86系统就理解为0x4512了。

要。只要类型长度超过1字节的,都要转换网络字节序。

socket api,这些很容易搜索到的,htonl,htos,用法还是自己找吧,自己找的,才会印象深刻

1、概念

字节序,又称端序,英文名称Endianness。字节序是指存放多字节(byte)数据的顺序。多用于整数在内存中的存放方式和网络传输的传输顺序,以及在蓝牙通讯中,表示数据传输字节长度。

2、原因

大小端序跟硬件的体系结构有关,跟 *** 作系统无关。

3、区别

大端字节序:高字节存于内存低地址,低字节存于内存高地址

小端字节序:高字节存于内存高地址,低字节存于内存低地址

例如:

实例一:整数在内存中的存放方式:

一个long型数据0x12345678

大端字节序:

内存低地址-》0x12

                          0x34

                         0x56

内存高地址-》0x78

小端字节序:

内存低地址-》0x78

                        0x56

                        0x34

内存高地址-》0x12

实例二:网络或蓝牙传输中的传输顺序:

传输长度为349的数据,转化为十六进制为0x015d

大端字节序传输:0x015d

内存低地址(前)0x01(高字节)

内存高地址(后)0x5d(低字节)

小端字节序传输:0x5d01

内存低地址(前)0x5d(低字节)

内存高地址(后)0x01(高字节)

备注:大小端字节序,是以字节为基本单位的,仅可针对多字节的情况,单字节:

0xF8转化为二进制:1111 1000第0位为0,第7位为1

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/12188641.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存