发送包,如何把struct转换成char

大大啊 2012-10-24 04:29:44
Msg msg;
msg.SetType(20);
msg.PushInt64(88);

char *buff;

//memcpy((void *)buff,(void *)msg,sizeof(msg));


上面MSG 是个 结构体

我想把 msg消息转换成 buff 那样。。如何转换??
...全文
360 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
大大啊 2012-10-29
  • 打赏
  • 举报
回复
是啊 就是转换成 char数组 传输!!! 但 我这里结构体转换后 为空的!!
赵4老师 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
引用 11 楼 的回复:
txt
XML
protobuf



???
[/Quote]
txt:用sprintf转为纯文本字符串发送
XML:调用XML相关源代码或库转为XML格式发送
protobuf:按照protobuf的约定打包发送
大大啊 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
txt
XML
protobuf
[/Quote]


???
赵4老师 2012-10-29
  • 打赏
  • 举报
回复
txt
XML
protobuf
大大啊 2012-10-29
  • 打赏
  • 举报
回复
Packet msg;

msg.Begin();
msg.SetType(110);
msg.PushInt8(11);
msg.PushInt8(21);

char *buff = new char[sizeof(msg)];
memcpy(buff,&msg,sizeof(msg));

为何 buff 最后内容为空的!! 感觉还是不行
I_ask_who 2012-10-25
  • 打赏
  • 举报
回复
boost里面有serialize库,可以将class或struct转换成字节流或者xml形式,看你的接收端是否是同一种编译软件写的而定
cbzjzsb123 2012-10-25
  • 打赏
  • 举报
回复
感觉可能还和大端小端有点关系。如果两台机子都一样,那直接转换成字节流发送就行了
Prairial_0 2012-10-25
  • 打赏
  • 举报
回复
感觉可能还和大端小端有点关系。如果两台机子都一样,那直接转换成字节流发送就行了。
Eleven 2012-10-24
  • 打赏
  • 举报
回复
memcpy()
sumos 2012-10-24
  • 打赏
  • 举报
回复
struct Stu
{
char name[10];
int age;
};
Stu st;
send(&st,sizeof(st));
我以前试过传送 结构体,其实真的可以,前提是结构体的sizeof是可以确定的。
这样接收后,就可以还原了。
mujiok2003 2012-10-24
  • 打赏
  • 举报
回复
只是转换,不需要拷贝的话:
char const * buf = (char const*)&msg; 

需要拷贝的话:

char buf[sizeof(MSG)]; //如果msg太大,请在堆上分配以免栈溢出
memcpy(buf, &msg, sizeof(buf));
IVERS0N 2012-10-24
  • 打赏
  • 举报
回复
char *buff = new char[sizeof(msg)];

memcpy(buff,&msg,sizeof(msg));
恨天低 2012-10-24
  • 打赏
  • 举报
回复
char buf[1024];
snprintf(buf, sizeof(buf), "%d%d", msg.GetType(), msg.PopInt64());
大大啊 2012-10-24
  • 打赏
  • 举报
回复
木人?

64,639

社区成员

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

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