虽然注册CSDN已经有好几年了,学习写程序也有两年的时间了。对于绝大数人来说,我还是得菜鸟。平时遇到什么问题也会来到这个平台搜索别人的解答。也从这个平台上获益很多。

今天在公司因为一个问题和同事就关于htons与ntohs有没有区别探讨了一下,因为我平时也没留意过,凭着我自己的理解,认为是没有区别的。比如,同在X86的机器下,这两个函数都不是把小端的内存表示方法转成大端的吗。在回来的路上,我想回来查查,同时也想到何不就这个问题写下来,方便自己以后查看,也帮助那些想要解决同样问题的同志呢,于是就开始了我第一篇技术贴。希望我自己也会一直这么继续下去。好了闲话少说,开始正题吧。

我用vc试了一下,结果是相同的。

我就想去看看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

代码是一样的。

ps: 开始我以为htons是函数,在源码包找了两个小时都没有找到,在绝望的时候看了下头文件,我汗颜了。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/kobeyxyx/archive/2010/05/17/5601830.aspx

从上面的头文件内容可以看出,如果平台是大字序的(如Pocket PC),则这些函数不作任何转换,只有在平台是小字序时(如X86),这些函数才进行相应的转换,htons和ntohs(以及htonl和ntohl)实际上没有任何区别,都是把字节序反转,只在于使用者对网络端和主机端理解意义的不同。

在PPC中则转换函数无效,若要进行转换可以自定义一个类似的函数,如下所示:

#define local_htons(x) ((unsigned short int)((((unsigned short int)(x) & 0x00ff)<<8)|/
                                            (((unsigned short int)(x) & 0xff00)>>8)))
    
#define local_htonl(x) ((unsigned long int)((((unsigned long int)(x) & 0x000000ff)<<24)|/
                                            (((unsigned long int)(x) & 0x0000ff00)<<8)|/
                                            (((unsigned long int)(x) & 0x00ff0000)>>8)|/
                                            (((unsigned long int)(x) & 0xff000000)>>24)))

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ast_224/archive/2009/03/28/4032491.aspx

检测系统的字序:

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/woyaoying/archive/2009/07/09/4333434.aspx

ntohs和htons的区别相关推荐

  1. ntohs和htons区别?

    一直以来都对这个两个函数含含糊糊的,今天又用到所以特意查看linux的源代码(/include/netinet/in.h) # if __BYTE_ORDER == __BIG_ENDIAN /* T ...

  2. htons() ntohl() ntohs() htons()的区别及详解

    在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题. 这时就可能用到htons(), ntohl(), ntohs(),htons()这4个网络字节顺序与本地字节顺序之间的转换函数 ...

  3. ntohs, ntohl, htons,htonl的比较和详解

    在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题. 这时就可能用到htons(), ntohl(), ntohs(),htons()这4个网络字节顺序与本地字节顺序之间的转换函数 ...

  4. ntohs, ntohl, htons,htonl

    ntohs, ntohl, htons,htonl的比较和详解 在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题. 这时就可能用到htons(), ntohl(), ntohs( ...

  5. htons(), ntohl(), ntohs(),htons()这4个函数

    在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题.这是就可能用到htons(), ntohl(), ntohs(),htons()这4个函数. 网络字节顺序与本地字节顺序之间的转 ...

  6. 网络字节与主机字节转换 htons(), ntohl(), ntohs(),htons() 函数

    在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题.这是就可能用到htons(), ntohl(), ntohs(),htons()这4个函数. 网络字节顺序与本地字节顺序之间的转 ...

  7. socket编程为什么需要htons(), ntohl(), ntohs(),htons() 函数

    在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题.这是就可能用到htons(), ntohl(), ntohs(),htons()这4个函数. 网络字节顺序与本地字节顺序之间的转 ...

  8. linux函数库之htons(), ntohl(), ntohs(),htons() 函数

    字节序分为大端字节序和小端字节序: 大端字节序: 是指一个整数的高位字节(32-31bit)存储在内存的低地址处,低位字节(0-7bit)存储在内存的高地址处. 小端字节序: 是指一个整数的高位字节( ...

  9. 为什么需要htons(), ntohl(), ntohs(),htons() 函数

    为什么需要htons(), ntohl(), ntohs(),htons() 函数: 在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题.这是就可能用到htons(), ntohl ...

最新文章

  1. 34岁,外企倒闭成功上岸大厂,50K,附面试秘籍
  2. 【Android 性能优化】应用启动优化 ( 启动优化项目 | 界面启动时间 | 启动优化项目 | 方法追踪 MethodTracing )
  3. 网络爬虫:分离生产者和消费者来优化爬虫程序
  4. 介绍一些好用的ArcToolbox工具(默认ArcGIS没有)
  5. 使用Session防止表单重复提交
  6. 机器学习实战-SVM算法-27
  7. 腾讯正式下线PC版QQ秀 网友:我的时代落幕了
  8. 【证明】—— 斐波那契
  9. Golang学习(12)——regex包
  10. CentOS7下安装并简单设置PostgreSQL笔记
  11. 景观平面图转鸟瞰图_嘉兴施工图设计说明及要求规范嘉兴建筑方案设计嘉兴钢结构加固设计需要什么资质嘉兴开门洞加固设计嘉兴如何看懂平面图嘉兴效果图制作视频...
  12. HCIE-Cloud题库
  13. 步进电机驱动电路设计精华_电动机控制电路图讲解
  14. 微信小程序转发功能的实现
  15. 网易云音乐突破版权限制
  16. oracle减去30分钟,Oracle 5分钟或30分钟分割方法
  17. 001简谱的调号、拍号和情绪
  18. 硬盘分区不够,怎么合并分区?
  19. 20T数据迁移经验:手把手教你群晖NAS数据迁移,黑裙晖通用!
  20. 木瓜蛋白酶和胃蛋白酶对免疫球蛋白Ig处理的不同

热门文章

  1. 华为OD机试真题Java实现【密室逃生游戏】真题+解题思路+代码(20222023)
  2. 计算机主机接通显示器位置发,电脑主机和显示器连接不上
  3. 8年美团经验之谈 —— 自动化测试成长之路
  4. 天池龙珠计划——机器学习训练营 Task3
  5. VSCode代码自动补全(html标签、style样式、css属性及值)
  6. node服务器性能测试,nodejs 性能测试报告
  7. PC104上配置VxWorks硬盘启动详解
  8. [linux-sd-webui]api化之训练lora
  9. AI设计师“鹿班”核心技术公开:如何1秒设计8000张海报? 1
  10. window.parent和contentWindow