protobuf的类与结构体互转问题

doudoushen 2013-09-05 03:34:57

假如:
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
也会遇到上面的问题
...全文
2214 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
newzai 2013-11-17
  • 打赏
  • 举报
回复
参考我的文章:http://blog.csdn.net/love_newzai/article/details/9013183
newzai 2013-09-27
  • 打赏
  • 举报
回复
不是直接copy啊,需要复制啊。。。 直接copy,你使用protbuf干嘛呢? 还不是直接原始结构发送到网络。。。。 对protobuf还没有认识清楚。建议baidu、google普及一下
赵4老师 2013-09-06
  • 打赏
  • 举报
回复
抓包 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。
yuanhong2910 2013-09-05
  • 打赏
  • 举报
回复
不能直接拷贝,protobuf有自己的编码方式。
rocktyt 2013-09-05
  • 打赏
  • 举报
回复
引用 3 楼 doudoushen 的回复:
[quote=引用 2 楼 hanyang291 的回复:] 两个结构体内存占据的大小不一样,直接转当然有问题了 “当CTest.b时知道是uint32,但此时不能从test.b拷贝,这个怎么办???????” 这个时候考虑一个自己给CTest不就行了,CTest有4个字节,拷贝一个又不会越界 memcpy(&(CTest.b), &(Test.b), sizeof(char));
我要写一个通用的转换功能[/quote]为什么必须是拷贝?直接赋值不行么 这样会自动帮你转换类型
doudoushen 2013-09-05
  • 打赏
  • 举报
回复
引用 2 楼 hanyang291 的回复:
两个结构体内存占据的大小不一样,直接转当然有问题了 “当CTest.b时知道是uint32,但此时不能从test.b拷贝,这个怎么办???????” 这个时候考虑一个自己给CTest不就行了,CTest有4个字节,拷贝一个又不会越界 memcpy(&(CTest.b), &(Test.b), sizeof(char));
我要写一个通用的转换功能
发型不乱hy 2013-09-05
  • 打赏
  • 举报
回复
两个结构体内存占据的大小不一样,直接转当然有问题了 “当CTest.b时知道是uint32,但此时不能从test.b拷贝,这个怎么办???????” 这个时候考虑一个自己给CTest不就行了,CTest有4个字节,拷贝一个又不会越界 memcpy(&(CTest.b), &(Test.b), sizeof(char));
doudoushen 2013-09-05
  • 打赏
  • 举报
回复
另外,字符串转换也有问题 比如下面的bb就不知道从结构体哪里开始拷起 message CTestStr{ optional string aa = 1; optional string bb = 2; optional string cc = 3; } struct teststr { char aa[10]; char bb[20]; char cc[30]; };

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧