读书人

protobuf的类与结构体互转有关问题

发布时间: 2013-10-07 19:41:22 作者: rapoo

protobuf的类与结构体互转问题

假如:
struct test
{
unsigned int a;
char b;
unsigned short c;
};

与之相对应的是不是CTest(貌似 protobuf没有char 、unsigned char、 short、unsigned short类型) ,我们人为确保a b c顺序一致
message CTest{
optional uint32 a = 1;
optional uint32 b = 2;
optional uint32 c = 3;
}


1、test转CTest
遍历CTest,
当CTest.a时知道是uint32,直接从test.a拷贝4个字节
当CTest.b时知道是uint32,但此时不能从test.b拷贝,这个怎么办???????

2、CTest转test
也会遇到上面的问题
[解决办法]

引用:
Quote: 引用:

两个结构体内存占据的大小不一样,直接转当然有问题了

“当CTest.b时知道是uint32,但此时不能从test.b拷贝,这个怎么办???????”
这个时候考虑一个自己给CTest不就行了,CTest有4个字节,拷贝一个又不会越界
memcpy(&(CTest.b), &(Test.b), sizeof(char));


我要写一个通用的转换功能
为什么必须是拷贝?直接赋值不行么
这样会自动帮你转换类型
[解决办法]
不能直接拷贝,protobuf有自己的编码方式。
[解决办法]
抓包

推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。

[解决办法]
不是直接copy啊,需要复制啊。。。
直接copy,你使用protbuf干嘛呢?
还不是直接原始结构发送到网络。。。。

对protobuf还没有认识清楚。建议baidu、google普及一下

读书人网 >C++

热点推荐