zoukankan      html  css  js  c++  java
  • C htonl()函数

    参考链接:https://blog.csdn.net/cpp1781089410/article/details/79391352

    htonl就是把本机字节顺序转化为网络字节顺序

    h---host 本地主机
    to  就是to 了
    n  ---net 网络的意思

    l 是 unsigned long

    所谓网络字节顺序(大尾顺序)就是指一个数在内存中存储的时候“高对低,低对高”(即一个数的高位字节存放于低地址单元,低位字节存放在高地址单元中)。但是计算机的内存存储数据时有可能是大尾顺序或者小尾顺序。

    先举个例子:
    int a = 0x403214;//本地字节顺序
    int b = htonl(a);//转为了网络字节顺序,虽然本地实际还是按本地字节顺序存储
    我在VC++6.0调试这段代码,发现
    &a的值为:0x0012ff44
    其中0x0012ff44、0x0012ff45、0x0012ff46、0x0012ff47这四个单元的值依次为:14、32、40、00,即0x403214这个数的高位部分存放在高位地址中,低位部分存放在低位地址中,即小尾顺序。
    &b的值为:0x0012ff40
    其中0x0012ff40、0x0012ff41、0x0012ff42、0x0012ff43这四个单元的值依次为:00、40、32、14,即把原数0x403214的高位部分存放在低位地址中,低位部分存放在高位地址中。
    由此可见,如果一个数以小尾顺序存储,经htonl函数调用后这个数的高地位字节会完全颠倒过来成为一个新的数。这个新的数在机器内部其实还是以小尾顺序存储的,但是相对于原来的数而言相当于是变成大尾顺序的了。
    long型的0x40写完整为:0x 00 00 00 40,共四个字节,调用htonl后四个字节颠倒顺序,为0x 40 00 00 00。
    同样,0x40 00 00 00调用htonl后变为0x 00 00 00 40,即0x40 

  • 相关阅读:
    git命令无法自动补全(sles11.3)
    linux下安装svn出现configure: error: We require OpenSSL; try --with-openssl
    Linux系统下升级Python版本步骤(suse系统)
    git commit --amend
    关于device tree中的interrupts选项
    BufferedInputStream
    FileInputStream
    FileOutputStream
    泛型上下限
    泛型接口
  • 原文地址:https://www.cnblogs.com/1149825709qq/p/13415047.html
Copyright © 2011-2022 走看看