欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > linux 网络序

linux 网络序

2024/10/26 1:31:37 来源:https://blog.csdn.net/CodeHouse/article/details/142649975  浏览:    关键词:linux 网络序
大小端判断
  • 根据整形二进制显示判断

    • 高位字节存放在内存中高地址处,低位字节存放在内存中低地址处则是小端;
    • 高位字节存放在内存中低地址处,低位字节存放在内存中高地址处则是大端;
    typedef struct Test{int a;int b;
    }Test_t;Test_t t = {.a=5,.b=6};
    // t.a二进制显示: 00000000 00000000 00000000 00000101
    // t.b二进制显示: 00000000 00000000 00000000 00000110
    // 查看t.a或t.b在内存中的二进制布局
    
    gcc -g test.c - test
    gdb ./test
    x/4tb &t.a
    0x7fffffffeb38: 00000101        00000000        00000000        00000000
    # 低字节00000101在内存中存放在低位地址(内存显示左到右是地址递增的),所以是小端
    # t.b同理
    x/4tb &t.b
    0x7fffffffeb3c: 00000110        00000000        00000000        00000000
    // 衍生出将多字节整形转单字节来判断大小端
    short int a = 3; // 00000000 00000011
    char c = (char)a;
    printf("%d\n", c); // 若c是0,则是大端,是3则小端
    
  • 在将ip字符串转网络序存储时

    char ipv4[] = "192.168.0.2";
    long nip = 0;
    inet_pton(AF_INET, ipv4, &nip);long uip = ntohl(nip);
    printf("%ld, %ld\n", uip, nip); // 若两者一样,则是大端(网络序是大端)
    x/4tb &nip
    0x7fffffffde08: 11000000        10101000        00000000        00000010x/4tb &uip
    0x7fffffffde30: 00000010        00000000        10101000        11000000 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com