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        00000010
    
    x/4tb &uip
    0x7fffffffde30: 00000010        00000000        10101000        11000000 
    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值