之前在写网络程序时,基本都会发出去之前调用htons/htonl、接收端收到报文后按照ntohs/ntohl来反解析,只知道是为了处理不同机器架构大小端带来的问题,并未深入思考其中的逻辑,今天突然想到了这个,就查了下,竟然与自己一直以为的不一样!!

linux的源代码位于/include/netinet/in.h

# if __BYTE_ORDER == __BIG_ENDIAN
/* The host byte order is the same as network byte order,
   so these functions are all just identity.  */
# define ntohl(x) (x)
# define ntohs(x) (x)
# define htonl(x) (x)
# define htons(x) (x)
# else
#  if __BYTE_ORDER == __LITTLE_ENDIAN
#   define ntohl(x) __bswap_32 (x)
#   define ntohs(x) __bswap_16 (x)
#   define htonl(x) __bswap_32 (x)
#   define htons(x) __bswap_16 (x)
#  endif
# endif

大吃一惊,原来是宏,如果平台是大端字序的(如MIPS架构),则这些函数不作任何转换,只有在平台是小端字序时(如X86、ARM),这些函数才进行相应的转换,htons和ntohs(以及htonl和ntohl)实际上没有任何区别,都是把字节序反转,只在于使用者对网络端和主机端理解意义的不同。

honts/htonl等大小端转换函数的原理相关推荐

  1. 使用函数实现数据大小端转换

    使用函数实现数据大小端转换 题目描述 在数字芯片设计中,经常把实现特定功能的模块编写成函数,在需要的时候再在主模块中调用,以提高代码的复用性和提高设计的层次,分别后续的修改. 请用函数实现一个4bit ...

  2. Linux大小端转换实现

    实现 #include <byteswap.h> #include <stdint.h>/*** @brief 8字节类型的字节序转化*/ template<class ...

  3. Verilog学习之数据大小端转换设计

    文章目录 前言 一.题目描述 二.实现思路 1.函数的概念 2.具体思路 三.代码展示 总结 前言 今天我们做的是第十道题--使用函数实现数据大小端转换,这道题其实也比较简单,就是逆向输出一个数据,但 ...

  4. c语言高低位拷贝_C语言中的大小端转换与高低位颠倒

    总结一下最近工作学到的东西,主要是关于大小端与高低位. 在说大小端高低位之前,肯定要说明数据在计算机内是如何存储的.在计算机中,我们将数据分割成了一个一个的字节(byte),而每个字节又有8位(bit ...

  5. 来点基础的东西,关于浮点数的大小端转换以及浮点数的格式解析

    在网上并没有任何信息或则资料介绍关于浮点数的大小端转换的原理的问题,大小端是不同的内存存储实现方式,大端更符合人的阅读习惯,而小端则是更适合CPU读取. 我先说整型,来说明大小端在内存中的存储方式,整 ...

  6. C语言中的大小端转换与高低位颠倒

    在说大小端高低位之前,肯定要说明数据在计算机内是如何存储的.在计算机中,我们将数据分割成了一个一个的字节(byte),而每个字节又有8位(bit). 一个字节,可以声明为unsigned char型数 ...

  7. java大小端转换工具类

    最近的项目频繁涉及大小端转换的情况,参考github(https://github.com/Frank-Wiebeler/java-Big2LittleEndian/blob/master/src/c ...

  8. Java 大小端转换(基于ByteBuffer)

    大小端的基础知识: 小端 ( little-endian):低位字节在前,高位字节在后.大端(Big-Endian),则反之.具体而言,就是为了说清楚,CPU架构中1字(word)的存储顺序.计算机内 ...

  9. 大小端转换 int16 和int32

    int16 大小端转换: static inline uint16_t bswap_16(uint16_t x) {     return (x >> 8) | (x << 8 ...

最新文章

  1. CentOS 6.0 VNC远程桌面配置
  2. 将0~N打乱顺序,然后排序
  3. 头的各个部位示意图_微观古建—古建筑的墀头(一)
  4. SpringBoot的配置详解application
  5. Visual Studio——fatal error C1902: Program database manager mismatch; please check your installation
  6. java图片转换为数据流_OpenCV 读取数据流图片
  7. 计算机符号大写怎么退出,大小写提示符号A怎么开启或关闭?
  8. 华为桌面小程序在哪里_小程序开发公司哪里强?看这几点
  9. HTMLCSS学习笔记(三)----标签类型转换、样式重置
  10. 473.火柴拼正方形
  11. go模板引擎生成html,goweb-模板引擎
  12. badboy使用简介
  13. MT6765/MT6762/MT6761平台能否使用ACC/Gyro/A+G与AP之间的I2C接口
  14. 千兆路由器怎么设置网速最快_tp无线路由器怎么设置网速最快
  15. 图片实现水平垂直居中的方法
  16. 使用node-ffmpeg将m4a转换为mp3
  17. 经济型EtherCAT运动控制器(一):功能简介与应用场景
  18. Charles浏览器抓包配置
  19. 小程序实现图片放大预览功能
  20. ipv4子网掩码是指的什么意思

热门文章

  1. AgileConfig-.net core 轻量级配置中心
  2. android字体!字节大神强推千页PDF学习笔记,大厂面试题汇总
  3. 禁止IOS长按复制粘贴
  4. 樱桃键盘驱动在哪下_闭着眼睛也能买的樱桃轴机械键盘——GANSS GS87C分享
  5. 统计学方法论2---------推断统计分析:通过样本推断总体
  6. java实现魔方_闲来无事,用java写了一个魔方小程序。附源码 | 学步园
  7. ajax302错误,Wordpress admin-ajax导致错误302重定向
  8. 找电影神器:根据台词对白查询出自哪部影片/动漫
  9. 工程电磁场导论第二章总结
  10. Symbian OS 开发初级手册 9(转)