搞清楚C语言的网络函数族hton ntoh 以及大小端记忆法

友链

今天要说的就是下面这几个函数

extern uint32_t ntohl (uint32_t __netlong) __THROW __attribute__ ((__const__));
extern uint16_t ntohs (uint16_t __netshort)
     __THROW __attribute__ ((__const__));
extern uint32_t htonl (uint32_t __hostlong)
     __THROW __attribute__ ((__const__));
extern uint16_t htons (uint16_t __hostshort)
     __THROW __attribute__ ((__const__));

// 之前看这个函数的时候总是记不住该用哪个,因为他们的名字都太相近了
// 现在在这里说明一下,这个函数的名称可以被分为四部分
// h to n s
// h代表host,n代表net,s代表类型为unsigned short,to就不用说了,就是英文单词to
// 所有htons意思就是将一个unsigned short的值从本地序转为网络序
// 本地序可能为大端也可能为小端,但是网络序一定是大端
// 转换完成后,返回值给了sockaddr_in结构体的sin_port成员

关于大小端的记忆方法,我这里提供一张图片

在这里插入图片描述
这个就是大端,其实这个很好记忆,相当于把横着的顺时针旋转90度变成那个竖着的(内存布局)

这张图里的内存布局是从上到下地址是变大的,横着的那个大端序的数字就是我们手写数字时的习惯,即高位在前面

也就是说大端序的内存布局其实是最符合人类直觉的,就这么记就行了

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值