Demeter第一级数据为二进制文件,其非字符串类型数据是典型的多字节字段数据,按照Big Endian字节序存储。Intel的x86系列计算机在内存中采用Little Endian 表示数据,同时C++程序的数据存储顺序也是同编译平台所在cpu类型相关,因此,需要显式地将多字节数值型字段在内存中的二进制数据字迹序前后倒置,在利用memecpy函数转换成相应的真是数据类型。
  求教高手,这个显式显式地将多字节数值型字段在内存中的二进制数据字迹序前后倒置,是什么意思?应该怎么处理? [

解决方案 »

  1.   

    简单地,写一个小函数,一个一个地转换,差不多这样(假定4字节整形)
    BYTE * B2L(BYTE *p)
    {
        BYTE n = p[0];
        p[0] = p[3];
        p[3] = n;
        n= p[1];
        p[1]=p[2];
        p[2]=n;
        return (p+4);
    }
      

  2.   

    //将src所指向的字节倒置,字节流长度为lenbool ByteRev(void* dest, void* src, unsigned int len)
    {
    if (dest && src)
    {
    unsigned char* pData = 0;
    unsigned int index = 0;
    for (pData = (unsigned char*)dest + len - 1; 
    pData >= (unsigned char*)dest;
    pData--)
    {
    *pData = *((unsigned char*)src + index);
    index++;
    }
    return true;
    }
    return false;
    }
      

  3.   

    TO1楼
    文件比较大,如果用你的方法直接一个循环能行不?
    例如:
    int i;//i假设为需要处理的二进制文件长度
    int a=0;
    if(a!=i)
    {p[a]=p[i];
     a=a+1;
     i=i-1;
    }
      

  4.   

    当然可以循环,而且还就得循环:
    BYTE buff[1024];//你的原始数据
    BYTE TempV;
    for(int i=0;i<1024/2;i+=2)
    {
    TempV=buff[i];
    buff[i]=buff[i+1];
    buff[i+1]=TempV;
    }
    就这样