htons()函数用法

htons()函数用法转自 http www cnblogs com CBDoctor archive 2012 10 28 2743109 html 在 C C 写网络程序的时候 往往会遇到字节的网络顺序和主机顺序的问题 这是就可能用到 htons ntohl ntohs htons 这 4 个函数 网络字节顺序与本地字节顺序之间的转换函数 nbsp nbsp nbsp nbsp nbsp nbsp htonl H

转自:http://www.cnblogs.com/CBDoctor/archive/2012/10/28/2743109.html

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

网络字节顺序与本地字节顺序之间的转换函数:

      htonl()–“Host to Network Long”

      ntohl()–“Network to Host Long”
      htons()–“Host to Network Short”
      ntohs()–“Network to Host Short”



之所以需要这些函数是因为计算机数据表示存在两种字节顺序:NBO与HBO

网络字节顺序NBO(Network Byte Order):
      按从高到低的顺序存储,在网络上使用统一的网络字节顺序,可以避免兼容性问题。

主机字节顺序(HBO,Host Byte Order):

      不同的机器HBO不相同,与CPU设计有关,数据的顺序是由cpu决定的,而与操作系统无关。 
如 Intelx86结构下,short型数0x1234表示为34 12, int型数0x表示为78 56 34 12如IBM power PC结构下,short型数0x1234表示为12 34, int型数0x表示为12   34 56 78
   
    由于这个原因不同体系结构的机器之间无法通信,所以要转换成一种约定的数序,也就是网络字节顺序,其实就是如同powerpc那样的顺序 。在PC开发中有ntohl和htonl函数可以用来进行网络字节和主机字节的转换。   


 

  2.

   转自他人博客!

在Linux和Windows网络编程时需要用到htons和htonl函数,用来将主机字节顺序转换为网络字节顺序。

   在Intel机器下,执行以下程序

htons()函数用法 int  main( )
htons()函数用法
{

htons()函数用法   printf(
%d \n,htons(16));
      return 0;
htons()函数用法}

得到的结果是4096,初一看感觉很怪。

    解释如下,数字16的16进制表示为0x0010,数字4096的16进制表示为0x1000。由于Intel机器是小尾端,存储数字16时实际顺序为1000,存储4096时实际顺序为0010。因此在发送网络包时为了报文中数据为0010,需要经过htons进行字节转换。如果用IBM等大尾端机器,则没有这种字节顺序转换,但为了程序的可移植性,也最好用这个函数。

   另外用注意,数字所占位数小于或等于一个字节(8 bits)时,不要用htons转换。这是因为对于主机来说,大小尾端的最小单位为字节(byte)。

包含的头文件为:”winsock2.h”

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231216.html原文链接:https://javaforall.net

(0)
上一篇 2026年1月21日 下午1:01
下一篇 2026年1月21日 下午1:22


相关推荐

  • Java虚拟机(JVM)你只要看这一篇就够了![通俗易懂]

    1.Java内存区域与内存溢出异常1.1运行时数据区域根据《Java虚拟机规范(JavaSE7版)》规定,Java虚拟机所管理的内存如下图所示。1.1.1程序计数器内存空间小,线程私有。字节码解释器工作是就是通过改变这个计数器的值来选取下一条需要执行指令的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖计数器完成如果线程正…

    2022年4月17日
    46
  • Qml异步加载图片「建议收藏」

    Qml异步加载图片「建议收藏」当图片很大时,加载图片可能导致UI线程的阻塞,为了确保图片在加载过程中不会阻塞UI线程,将Image元素的’asynchronous’设置为trueImage{asynchronous:truesource:"test.png"}…

    2025年8月8日
    5
  • win7 配置JDK环境变量

    win7 配置JDK环境变量第一步 安装 jdk 8u101 windows x64 exe 路径为默认路径 一直下一步直到完成安装 安装最好不要修改安装路径 防止自己找不到 第二步 设置环境变量 1 进入环境变量设置的方法 这里只针对 Windows7 计算机 右键 属性 高级系统设置 高级 环境变量 打开环境变量设置窗口 2 在下面的 系统环境变量 设置窗口中 点击 新建 建立 JAVA HOME

    2026年3月17日
    2
  • 在pycharm中如何使用anaconda环境进行编辑_pycharm中导入pygame

    在pycharm中如何使用anaconda环境进行编辑_pycharm中导入pygame目录一.简单使用二:如何打包工程中的使用到的其他文件(如,excel,cfg等)三.通过pyinstaller打包后的resources,如何找到呢一.简单使用1.在虚拟环境中,添加pyinstallerlib2.将pyinstallertool加入到pycharm的externtool中-D,–onedirCreateaone-fold…

    2022年8月27日
    9
  • 如何安装java-jdk「建议收藏」

    之前第一次安装java-jdk时,因为不太懂,中间出新了很多问题,所以这次安装想记录下。1.进入oracle官网:www.oracle.com2.将Accept前选中,下载jdk,3.打开下载文件夹,双击程序安装4.安装时可以修改路径,这里选择默认路径C:\ProgramFiles\Java\jdk-11.0.25.发现安装完成后并不能使用因为javac.exe在C:\Pr…

    2022年4月5日
    43
  • java创建数组并且赋值

    java创建数组并且赋值java 创建数组并且赋值 int arr 1 2 4

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号