zoukankan      html  css  js  c++  java
  • 详解C语言的htons函数

    昨天和同事讨论了一下这个函数,在网络上搜了一下,答案都是函数的基本概念,为什么是大端模式(big-endian),而没有解释为什么使用大端模式(big-endian)。首先说明一下概念

    uint16_t htons(uint16_t hostshort);
      htons的功能:将一个无符号短整型数值转换为网络字节序,即大端模式(big-endian)
      参数u_short hostshort: 16位无符号整数
      返回值:TCP / IP网络字节顺序
      htons 是把你机器上的整数转换成“网络字节序”, 网络字节序是 big-endian,也就是整数的高位字节存放在内存的低地址处。 而我们常用的 x86 CPU (intel, AMD) 电脑是 little-endian,也就是整数的低位字节放在内存的低字节处。举个例子吧。假定你的port是0x1234,在网络字节序里 这个port放到内存中就应该显示成addr addr+1,也就是:0x12 0x34;而在x86电脑上,0x1234放到内存中实际是:addr addr+1,也就是:0x34 0x12。htons 的用处就是把实际内存中的整数存放方式调整成“网络字节序”的方式。

    第一个问题:为什么使用两个字节,也就是16位来存储。

      这个简单一些,因为一个字节只能存储8位2进制数,而计算机的端口数量是65536个,也就是2^16,两个字节。

    第二个为题:为什么计算机需要大端模式和小端模式?

      小端模式 :强制转换数据不需要调整字节内容,1、2、4字节的存储方式一样。
      大端模式 :符号位的判定固定为第一个字节,容易判断正负

    参考:http://blog.csdn.net/ce123/article/details/6971544

  • 相关阅读:
    mac上finalShell的安装
    c 字符串与字符串操作
    .net5 MailKit
    c 99乘法表
    element 动态表单加自定义校验
    遇到的问题 vscode 问题
    vue-element-admin eslint 规则查询表
    利用html2canvas 导出网页 (只是用于自己的笔记,如果需要看配置,自行查找插件api)
    git 常用命令
    uniapp中自动打包微信小程序后自动上传代码
  • 原文地址:https://www.cnblogs.com/liqiu/p/2982406.html
Copyright © 2011-2022 走看看