ntohs和htons的区别

article/2025/9/20 9:03:32

虽然注册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


http://chatgpt.dhexx.cn/article/Ib9LyoQc.shtml

相关文章

socket编程中的 htons()

文章目录 1.内存存储数据的方式1.1 数据字节序号1.2 小端字节序1.3 大端字节序 2. 转换顺序2.1 网络字节序2.2 主机字节序2.3 转换函数 在刚刚接触 socket 时&#xff0c;遇到了 htons() 函数&#xff0c;就直接懵逼了&#xff0c;这是什么东西&#xff0c;有什么用&#xff1f…

高并发解决方案——Redis(一)

简介 Redis作为重要的缓存数据库在高并发的解决方案中起着重要作用。为了系统的学习Redis&#xff0c;也为了秋招&#xff08;美团比较关注Redis 的掌握&#xff09;&#xff0c;计划编写该系列博客&#xff0c;也是为了整理知识点。 本篇主要介绍了Redis的基础知识与原理。之…

Jmeter超高并发解决方案

背景一亿用户量&#xff0c;平均每人每天10次的业务量&#xff0c;要求并发数在5000以上&#xff0c;峰值在5w到10w之间&#xff0c;QPS在25w以上 一、jmeter解决高并发的优化方案 1.1 优化监听&#xff08;GUI模式&#xff0c;尽量不考虑&#xff09; …

2023春招面试专题:高并发解决方案

如何理解高并发&#xff1f; 高并发意味着大流量&#xff0c;需要运用技术手段抵抗流量的冲击&#xff0c;这些手段好比操作流量&#xff0c;能让流量更平稳地被系统所处理&#xff0c;带给用户更好的体验。 我们常见的高并发场景有&#xff1a;淘宝的双11、春运时的抢票、微…

高并发解决方案之熔断处理

高并发解决方案之熔断处理 前言概念基本介绍三种状态熔断方式常用框架功能对比使用介绍 参考链接 前言 问题列表 跨系统、跨服务调用第三方接口时&#xff0c;第三方接口响应超时或者服务不可用&#xff0c;发生连锁故障进而导致雪崩效应。 举例说明 假设上游服务是A&#xff…

阿里云高并发解决方案

今天这篇帖子我会讲解一下金蝶财务软件K3_CLOUD高并发部署在阿里云上得解决方案,本篇博客同样适用于其他软件高并发上云部署 以我去年12月份的一个客户项目为例。 做过项目的朋友都知道,小客户比较关注的是成本,大客户关注的是价值和服务。高并发客户一般都会有专业的IT运…

高并发解决方案相关面试题

什么是DNS解析域名 DNS域名解析就是讲域名转化为不需要显示端口&#xff08;二级域名的端口一般为80&#xff09;的IP地址&#xff0c;域名解析的一般先去本地环境的host文件读取配置&#xff0c;解析成对应的IP地址&#xff0c;根据IP地址访问对应的服务器。若host文件未配置…

Token高并发解决方案

Token高并发解决方案 一&#xff1a;作为token使用的第三方 客户端模式使用token 可以采用单例模式或定义一个全局变量isRefresh 标志&#xff0c;加同步锁Synchronized来保证token过期的那个时间点&#xff0c;刷新token方法只被调用一次。 二&#xff1a;作为token服务器端…

大数据和高并发解决方案

一、网站应用背景 开发一个网站的应用程序&#xff0c;当用户规模比较小的时候&#xff0c;使用简单的&#xff1a;一台应用服务器一台数据库服务器一台文件服务器&#xff0c;这样的话完全可以解决一部分问题&#xff0c;也可以通过堆硬件的方式来提高网站应用的访问性能&…

电商中常见的高并发解决方案

目录 多级缓存 什么叫多级缓存 多级缓存的实现思路 Redis 缓存同步 MySql 数据 Nginx 限流 什么是限流 常见的限流算法之漏桶算法 nginx 限流的方式 控制速率 控制并发量&#xff08;连接数&#xff09; 在本文中&#xff0c;我们将以京东为例&#xff0c;了解电商中…

【数据科学】斯皮尔曼的等级相关系数(Spearman's coefficient)

在统计数据中&#xff0c;斯皮尔曼的等级相关系数或斯皮尔曼的rho&#xff0c;以查尔斯斯皮尔曼命名并经常用希腊字母表示或&#xff0c;是秩相关的非参数度量&#xff08;两个变量的排名之间的统计依赖性&#xff09;。它评估了使用单调函数描述两个变量之间关系的程度。 两个…

python 利用Scipy计算person 和spearman相关系数

python 利用Scipy计算person 和spearman相关系数 觉得有用的话,欢迎一起讨论相互学习~ 学习以下两位大佬的讲解 (Pearson)皮尔逊相关系数和spearman相关系数&#xff08;附python实现&#xff09; 相关性系数及其python实现 皮尔逊相关系数 下面是皮尔逊相关系数的计算公式…

Python+pandas计算数据相关系数(person、Kendall、spearman)

pandas中DataFrame对象corr()方法的用法&#xff0c;该方法用来计算DataFrame对象中所有列之间的相关系数&#xff08;包括pearson相关系数、Kendall Tau相关系数和spearman秩相关&#xff09;。 pandas相关系数-DataFrame.corr()参数详解 DataFrame.corr(methodpearson, min_p…

相关性Correlations 皮尔逊相关系数(pearson)和斯皮尔曼等级相关系数(spearman)

相关性Correlations Correlations&#xff0c;相关度量&#xff0c;目前Spark支持两种相关性系数&#xff1a;皮尔逊相关系数&#xff08;pearson&#xff09;和斯皮尔曼等级相关系数&#xff08;spearman&#xff09;。相关系数是用以反映变量之间相关关系密切程度的统计指标。…

spearman学习

特征提取&#xff0c;预测都弄完了&#xff0c;现在要检查一下预测的效果。 spearman秩相关系数是度量两个变量之间的统计相关性的指标&#xff0c;用来评估当用单调函数来描述两个变量之间的关系有多好。在没有重复数据的情况下&#xff0c;如果一个变量是另外一个变量的严格…

R语言中进行Spearman等级相关分析

摘要 使用Spearman等级相关性测试两个等级变量或一个等级变量和一个测量变量之间的关联。 如果您担心非正态性&#xff0c;也可以对两个测量变量使用Spearman等级相关性而不是线性回归/相关性&#xff0c;但这通常不是必须的。 宏伟的军舰鸟&#xff08;军舰鸟magnificens&…

相关系数pearson、spearman、kendall和R语言中的cor/or.test()

相关系数pearson、spearman、kendall和R语言中的cor/cor.test 1. 相关系数pearson、spearman、kendall2. R语言cor函数和cor.test函数 1. 相关系数pearson、spearman、kendall Pearson相关系数很简单&#xff0c;是用来衡量两个数据集的线性相关程度&#xff1b;而Spearman相关…

皮尔逊(Pearson)相关系数与spearman相关系数(Python实现)

概念介绍 相关系数&#xff1a;考察两个事物&#xff08;在数据里我们称之为变量&#xff09;之间的相关程度。 相关系数大小解释 相关性绝对值无相关0 - 0.09弱相关0.1 - 0.3中相关0.3 - 0.5强相关0.5 - 1 表中所定的标准从某种意义上说是武断的和不严格的。 对相关系数的解…

3.1 相关系数(person与spearman)

1.1总体皮尔逊&#xff08;person&#xff09;相关系数&#xff1a; 在概率论与数理统计中我们学到&#xff0c;若两组数据X{x1&#xff0c;x2…xn}与Y{y1&#xff0c;y2…yn}为总体数据&#xff0c;则总体协方差为 它表示两个变量的总体误差&#xff0c;若XY相对于各自均值同…

斯皮尔曼相关(spearman)系数法

在分析指标与指标、指标与研究对象的影响程度时&#xff0c;很多时候会用到相关系数法&#xff0c;下面介绍一下斯皮尔曼相关系数法。 斯皮尔曼等级相关是根据等级资料研究两个变量间相关关系的方法。它是依据两列成对等级的各对等级数之差来进行计算的&#xff0c;斯皮尔曼等级…