首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

怎么将一个结构体放入一段buffer中去

2012-02-10 
如何将一个结构体放入一段buffer中去?现有结构体A,B,C,一段固定长度的Buffer,如何实现将几个结构体依次放

如何将一个结构体放入一段buffer中去?
现有结构体A,B,C,一段固定长度的Buffer,如何实现将几个结构体依次放入buffer中去?

[解决办法]
用memcpy试试
[解决办法]
序列化。。。。
[解决办法]
memcpy(Buffer,&A,sizeof(A));
memcpy(Buffer+sizeof(A),&B,sizeof(B));
memcpy(Buffer+sizeof(A)+sizeof(B),&C,sizeof(C));
[解决办法]
3楼正解,
更完整的写法:

memcpy(Buffer,(char *)&A,sizeof(A)); 
memcpy(Buffer+sizeof(A),(char *)&B,sizeof(B)); 
memcpy(Buffer+sizeof(A)+sizeof(B),(char *)&C,sizeof(C));
[解决办法]

C/C++ code
// 还是用unsigned char*吧memcpy(Buffer,(unsigned char*)&A,sizeof(A)); memcpy(Buffer+sizeof(A),(unsigned char*)&B,sizeof(B)); memcpy(Buffer+sizeof(A)+sizeof(B),(unsigned char*)&C,sizeof(C));
[解决办法]
哦。。
受教了。。原来memcpy可以这么用,,
莫非反过来也能用,,(反序列化)
帮顶。。。
[解决办法]
内存拷贝就可以了。
[解决办法]
期待类中序列化函数
[解决办法]
要看你的结构里面有没有指针,如果没有指针,可以直接使用memcpy、
否则要进行序列化(串行化)
[解决办法]
也可以将这样
(A*)Buffer = a;
(B*)(Buffer+sizeof(A)) = b;
....
[解决办法]
up
[解决办法]
mark
[解决办法]
可以重载 placement new 

C/C++ code
struct A{    int i;    int j;};struct B{    int i;    int j;    int k;};int main(int argc, char* argv[]){    void * P = (void*)operator new(20);        A a;    a.i = 1;    a.j = 2;    B b;    b.i = 3;    b.j = 4;    b.k = 5;    A* a1 = new (P) A(a);    P =(A*)P + 1;    B* b1 = new (P) B(b);    cout<<a1->i<<" "<<a1->j<<endl;    cout<<b1->i<<" "<<b1->j<<" "<<b1->k<<endl;    return 0;}
[解决办法]
探讨
放到buffer里面去了以后,如何正确读出buffer里面的内容呢?

[解决办法]
up 3楼
[解决办法]
new

热点排行