如何将一个结构体放入一段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));
[解决办法]
// 还是用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
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;}
[解决办法]