zoukankan      html  css  js  c++  java
  • socket 通信 Windos 和 Linux之间 Big endian 和 little endian的转换策略

    Big endian 和 little endian

    本次测试仅仅一32Bits的Intel X86系统和Moto Power PC系统TCP/IP socket connection联调作为讨论内容。
    结论如下:

    传输某一结构体。
    #pragma   pack(4)  
    typedef struct{
    char name[6];
    int age;
    char sex;
    short tel;
    }student;
    #pragma   pack()

    NBO network byte order 网络字节序
    HBO host byte order   主机字节序

    1.当peer ends都为X86系统时,两端都是little endian,我们无需关心如何NBO和HBO转换,

    发端:
    student stu1;
    stu1.age = 0x00000304;
    memcpy( stu1.name,"abcdef",6);
    stu1.sex = 'f';
    stu1.tel = 0x0809;

    收端:
    age=0x304
    tel=0x809

    value=0X61 addr=0Xbfe6d3f0
    value=0X62 addr=0Xbfe6d3f1
    value=0X63 addr=0Xbfe6d3f2
    value=0X64 addr=0Xbfe6d3f3
    value=0X65 addr=0Xbfe6d3f4
    value=0X66 addr=0Xbfe6d3f5
    value=0X0 addr=0Xbfe6d3f6
    value=0X0 addr=0Xbfe6d3f7
    value=0X4 addr=0Xbfe6d3f8
    value=0X3 addr=0Xbfe6d3f9
    value=0X0 addr=0Xbfe6d3fa
    value=0X0 addr=0Xbfe6d3fb
    value=0X66 addr=0Xbfe6d3fc
    value=0X0 addr=0Xbfe6d3fd
    value=0X9 addr=0Xbfe6d3fe
    value=0X8 addr=0Xbfe6d3ff

    2.当peer ends都为Power系统时,两端都是big endian,我们无需关心如何NBO和HBO转换.

    3.当一端为Power PC一端为X86时,小端需要做发送前的转换和接受后的转换,而大端不需要.
    发送前小端对short型调用htons,对long和int调用htonl.
    接受后小端对short型调用ntohs,对long和int调用ntohl.
    则可以保证通过调用结构体变量得到的数值是正确的.

    亦即发送方age = 0x00000304 ,接受方为也是0x000000304.如果不转化,可能变成0x04030000.

  • 相关阅读:
    Git切换分支
    JS中字符串那些事~
    将博客搬至CSDN
    MFC默认窗口类名称
    Windows下使用vim编写代码,使用nmake编译代码,使用vs来调试代码
    从CWnd::GetSafeHwnd实现得到的知识
    ctags使用
    MCI支持的格式在注册表中的位置
    注意!!一定要谨慎使用c/c++原生指针
    MFC模态对话框程序不响应OnIdle
  • 原文地址:https://www.cnblogs.com/cy163/p/1560640.html
Copyright © 2011-2022 走看看