一个一个的往里放太费劲,有没有简便的办法?buf = (char*)&stru;这样的办法不可行,结构体的成员内存中不保证连续

解决方案 »

  1.   

    没有
    计算机不怕你Loop它,尽管弄:)
      

  2.   

    用指针偏移。
    多次Memcpy
    不连续的地方偏移过去即可
      

  3.   

    //获取从m开始的内存偏移量f
    #define  OFFSET_MEM(m,f)   (void*)(((unsigned long (m)) + (unsigned long)(f)))//拷贝内存,并偏移原始内存
    #define memcpy_off(dest,src,len)  (memcpy((void*)(dest),(void*)src,(size_t)len) , OFFSET_MEM(dest,len) )
      

  4.   


    结构体在内存中的确是不连续的。struct A
    {
    char a;
    int b;
    char c;
    char d;
    }; A a;
    a.a = 1;a.b = 2;a.c = 3;a.d = 4;
    ……
    如上图,如果取这个结构体对象的地址,指针往后移一个字节,取出的是cc
      

  5.   

    这个问题我是没什么好办法。一个一个的Copy吧
      

  6.   

    1.所谓结构体在内存里不连续可能是字节对齐问题,可以用#pragma pack(push,1)设置一下
    2.不知道为啥要拷贝到char数组里。如果可以的话,其实可以考虑先分配一个char的数组,然后用reinterpret_cast<结构体类型指针>(char数组)来转换,这样的得到的结果就是一个结构体的指针,可以直接操作结构体,也不用再拷贝到char数组了。