虽然注册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是函数,在源码包找了两个小时都没有找到,在绝望的时候看了下头文件,我汗颜了。 |