本地字节序和网络字节序

本文介绍了字节序的概念,包括小端序和大端序,强调在网络通信中需要统一使用网络字节序(大端序)。本地字节序与网络字节序的转换函数,如htonl、htons、ntohl和ntohs的使用,以及它们在不同平台下的行为。此外,还讨论了IP地址转换函数inet_addr及其局限性,推荐使用inet_pton和inet_ntop作为替代。
摘要由CSDN通过智能技术生成

本地字节序和网络字节序
字节序指不同的CPU访问内存中多字节数据的时候,存在大小端的问题,并且一定是访问多字节数据的时候才会存在大小端的问题,如果CPU访问的是字符串,则不存在大小端的问题;
那么如何判断发送端和接收端是大端模式还是小端模式呢,首先:
●小端序(little-endian) - 低序字节存储在低地址;将低字节存储在起始地址,称为“Little-Endian”字节序,Intel、AMD等采用的是这种方式;
●大端序(big-endian)- 高序字节存储在低地址;将高字节存储在起始地址,称为“Big-Endian”字节序,由ARM、Motorola

例如有一个int型的变量:int i = 0x12345678;这里的“12”就是变量的高端,“78”就是变量的低端;
在这里插入图片描述
其实本地和网络字节序的转换,主要是为了不同平台之间兼容性的问题,例如两台主机要进行网络数据的传输,有两种情况(首先我们要知道,网络中传输的数据必须按网络字节序,即大端字节序;因为网络传输过程中的中间设备的处理器都是大端模式的,这是规定好的):
1.发送端是大端模式,接收端是小端模式;如果发送端不进行字节序的转换,那么这个应用程序运行到发送端是小端模式的主机上之后,网络传输就会有问题,比如说网络传输过程中的中间设备不能正确的读取收发端的IP地址和MAC地址;
2. 发送端是小端模式,接收端是大端模式;如果接收端不进行字节序的转换,而且发送端还传输了多字节的数据的话,那么这个应用程序运行到接收端是小端模式的主机上之后,接收端接收到的数据就会有问题;

因为两台设备进行网络传输,这两台设备可能不是一个平台上的CPU,不同平台上的两个CPU,它们可能两个都是大端模式的,也有可能都是小端模式的,还有可能一个是大端模式一个是小端模式或者一个是小端模式一个是大端模式,所以两台机器要进行网络传输,必须统一发送、传输和接受的模式,由此课件数据转换的主要目的就是为了保证兼容行;
在这里插入图片描述
当然,字节序转换函数里面已经包含了这种方法,函数本身会直接的判断当前操作系统中的CPU的大端模式还是小端模式,需要转换的话就转换,不需要转换的时候就原样输出;

下面是本地字节序到网络字节序转换的函数:
主机字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值