主机字节序和网络字节序列

主机字节序和网络字节序列

大端小端的定义
 a.Little endinan 低位存储在内存的低地址,高位存储在内存的高地址;
 b.Big endian 高位存储在内存的低地址,低位存储在内存的高地址;

写代码查看你的网络字节序列
    利用union里面的数据共享内存进行测试
    void t_order(){
        union{
            short value;
            char union_bytes[sizeof(short)];
        }test;
        test.value = 0x0102;
        printf("p0=%p,p1=%p",&(test.union_bytes[0]),&(test.union_bytes[1]));
        if(test.union_bytes[0] == 1 && test.union_bytes[1] == 2 ){
            puts("大端");
        }else if(test.union_bytes[0] == 2 && test.union_bytes[1] == 1 ){
            //0x7fff5fbff788 存储2  0x7fff5fbff789存储1
            puts("小端");
        }else{
            puts("未知");
        }
    }

网络字节序列默认是大端的,所以需要转换,java虚拟机默认的是大端字节序列

字节序列转换函数    
    htonl()--"Host to Network Long int"     32Bytes
   ntohl()--"Network to Host Long int"     32Bytes
   htons()--"Host to Network Short int"   16Bytes
   ntohs()--"Network to Host Short int"   16Bytes

看看代码
    void t_ntl(){
        int a = 0x403214;
        int b = htonl(a);
        //传输32位
        printf("host=%0x,big=%0x,big_t_host=%0x\n",a,b,ntohl(b));
        //16
        int a2 = 0x1234;
        int b2 = htons(a2);
        printf("host=%0x,big=%0x,big_t_host=%0x",a2,b2,ntohs(b2));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值