关闭

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

标签: 网络内存存储测试数据
340人阅读 评论(0) 收藏 举报
分类:

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

大端小端的定义
 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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:129603次
    • 积分:3382
    • 等级:
    • 排名:第9921名
    • 原创:213篇
    • 转载:22篇
    • 译文:0篇
    • 评论:9条
    博客专栏