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

  • 相关阅读:
    用Android Studio 开发Android应用
    以前写的一个下载小说的工具
    折半算法的C#实现方式-递归和非递归
    128. 最长连续序列
    一语点醒技术人:你不是 Google(转载)
    计算机专业导论与思维系统--哈工大
    安卓笔记 09_28
    安卓学习笔记
    安卓数据库08_29
    08_28学习笔记Kotlin
  • 原文地址:https://www.cnblogs.com/liqiu/p/2982406.html
Copyright © 2011-2022 走看看