结构体转char数组

张伟强迫症 2017-02-15 08:34:04
如题,因为结构体内的地址不是连续的,怎么将一个结构体转为一段连续的字符串?
struct joint
{
bool b;
int x;
double y;
};

之后再用send函数发送然后再解析。
...全文
655 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2017-02-20
  • 打赏
  • 举报
回复
你可以直接发送出去,或者序列化以后再发送。
张伟强迫症 2017-02-20
  • 打赏
  • 举报
回复
多谢各位大神。
赵4老师 2017-02-20
  • 打赏
  • 举报
回复
RawData、XML、jason、protobuf、……
真相重于对错 2017-02-18
  • 打赏
  • 举报
回复
引用 5 楼 Armin_ 的回复:
[quote=引用 4 楼 hdt 的回复:] [quote=引用 3 楼 Armin_ 的回复:] [quote=引用 2 楼 Armin_ 的回复:] [quote=引用 1 楼 hdt 的回复:] 直接转 或者 memcpy
直接转不行的 内存不是连续的[/quote]
引用 1 楼 hdt 的回复:
直接转 或者 memcpy
memcpy内存拷贝也有问题 [/quote] 你不用管它连不连续,只要对方知道这个结构体的布局 用memcpy直接转回去 [/quote]这样不行啊 比如C#和C++结构体的内部肯定是不一样的 不能直接内存拷贝的[/quote] 刚看到, c# 完全可以指定成员的位移,使之与c++相符,很长时间没动过.net了,具体的方法记不大清,好像是[fieldoffset]属性 具体查一下msdn关于平台调用那一部分
kakabulusi 2017-02-16
  • 打赏
  • 举报
回复
使用union定义成联合体类型, 类似于IP地址的定义, IP地址可以解析成以下几个类型的结构体。 1.1.1.1四个字节,(每个字节的最大取值是255) 前面两个组合成一个字,后面两个字节组合成一个字。 257(256*1+1).257(256*1+1). (每个的最大取值是65535) 也可以作为一个双子类型的数据来处理 ((256*1+1)*256+1)*256+1 这个就是IP地址的本质。 例如回路地址是127.0.0.1 你可以直接使用ping 命令,ping这个数字((256*127+0)*256+0)*256+1 所得的整数。就知道IP地址的本质了。
lx624909677 2017-02-16
  • 打赏
  • 举报
回复
保证发送和接收的结构体是一样的,直接赋值就可以,不用专门自己去解析
worldy 2017-02-16
  • 打赏
  • 举报
回复
你想干嘛,最直接的如下
struct joint
{
bool b;
int x;
double y;
};

jount a;//定义一个结构体变量

char* p=(char*)&a;
p就是字节数组
zgl7903 2017-02-16
  • 打赏
  • 举报
回复
#pragma pack(push, 1) struct joint { bool b; int x; double y; }; #pragma pack(pop) 因为int 在有的系统中可能等同于short, double 等同于 float, 还有大小端等问题 如果是不同的系统 建议格式化成字符串 传送字符串,接收完了再解析成数据
张伟强迫症 2017-02-15
  • 打赏
  • 举报
回复
引用 8 楼 nry19871012 的回复:
直接使用一字节对齐。
求问改怎么写啊
nry19871012 2017-02-15
  • 打赏
  • 举报
回复
直接使用一字节对齐。
张伟强迫症 2017-02-15
  • 打赏
  • 举报
回复
引用 6 楼 hdt 的回复:
只要每个成员的偏移量清楚了,何必管它连不连续?
但是这样对齐是个问题啊。所以有别的办法么?
真相重于对错 2017-02-15
  • 打赏
  • 举报
回复
只要每个成员的偏移量清楚了,何必管它连不连续?
张伟强迫症 2017-02-15
  • 打赏
  • 举报
回复
引用 4 楼 hdt 的回复:
[quote=引用 3 楼 Armin_ 的回复:] [quote=引用 2 楼 Armin_ 的回复:] [quote=引用 1 楼 hdt 的回复:] 直接转 或者 memcpy
直接转不行的 内存不是连续的[/quote]
引用 1 楼 hdt 的回复:
直接转 或者 memcpy
memcpy内存拷贝也有问题 [/quote] 你不用管它连不连续,只要对方知道这个结构体的布局 用memcpy直接转回去 [/quote]这样不行啊 比如C#和C++结构体的内部肯定是不一样的 不能直接内存拷贝的
真相重于对错 2017-02-15
  • 打赏
  • 举报
回复
引用 3 楼 Armin_ 的回复:
[quote=引用 2 楼 Armin_ 的回复:] [quote=引用 1 楼 hdt 的回复:] 直接转 或者 memcpy
直接转不行的 内存不是连续的[/quote]
引用 1 楼 hdt 的回复:
直接转 或者 memcpy
memcpy内存拷贝也有问题 [/quote] 你不用管它连不连续,只要对方知道这个结构体的布局 用memcpy直接转回去
张伟强迫症 2017-02-15
  • 打赏
  • 举报
回复
引用 2 楼 Armin_ 的回复:
[quote=引用 1 楼 hdt 的回复:] 直接转 或者 memcpy
直接转不行的 内存不是连续的[/quote]
引用 1 楼 hdt 的回复:
直接转 或者 memcpy
memcpy内存拷贝也有问题
张伟强迫症 2017-02-15
  • 打赏
  • 举报
回复
引用 1 楼 hdt 的回复:
直接转 或者 memcpy
直接转不行的 内存不是连续的
真相重于对错 2017-02-15
  • 打赏
  • 举报
回复
直接转 或者 memcpy

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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