ntohl()、htonl()、ntohs()、htons()函数

一 、大端存储和小端存储

1、大端存储:在计算机中,数据是按照字节存储的,多于一个字节的数据,把高字节部分存储在低地址,把低字节部分存储在高地址,这种方式称为大端存储。
例:0x12345678这个数据,我们一般认为左边是高字节部分,右边是低字节部分,那么在采用大端存储的计算机内部的存储则为下面这样
低地址: 0x12(高字节)
>>>>>: 0x34
>>>>>: 0x56
高地址: 0x78(低字节)
即一个整型数据的首地址=高位部分(首地址=低地址)

2、小端存储:多于一个字节的数据,把高字节部分存储在高地址,把低字节部分存放在低地址。
例:0x12345678这个数据,我们一般认为左边是高字节部分,右边是低字节部分,那么在采用小端存储的计算机内部的存储则为如何下这样
低地址: 0x78(低字节)
>>>>>: 0x56
>>>>>: 0x34
高地址: 0x12(高字节)
即首地址部分=低位部分(首地址=低地址)

二、ntohl()、htonl()、ntohs()、htons()函数

网络传输通讯过程中,采用大端在前的方式进行数据发送,对于采用小端模式进行数据存储的系统,要把多字节的数据通过网络传输出去,则需要将数据的字节序进行转换,再进行发送。接收的过程亦然。
在这几个函数中n代表net网络,h代表host主机,l代表long长整型,s代表short短整型。这几个函数的作用分别为:

ntohl():将一个无符号长整形数从网络字节顺序转换为主机字节顺序

htonl():将一个无符号长整形数从主机字节顺序转换为网络字节顺序

ntohs():将一个无符号短整形数从网络字节顺序转换为主机字节顺序

htons():将一个无符号短整形数从主机字节顺序转换为网络字节顺序

如下代码

uint32 a=0x12345678;
uint32 b;
b=htonl(a);

运行的结果为b=0x78563412;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值