关于通信中C/C++数据交换的一个问题

bandaoyu 2017-11-05 01:13:24
typedef struct fighter

{
int32 seriesNo;
int32 gunNum;

int32 speed;

} stFighter;

stFighter myFigther;

目前我们的通信是这样的,服务端将myFigther 以二进制流 figtherBuff的方式传到客户端,客户端根据协议知道 speed在数据流的8-11字节,将8-11字节拿出,解析为int32 的参量。

我就想,既然myFigther是结构体,那可以不可以两端都定义stFighter;,在figtherBuff传到客户端之后,客户端通过stFighter *pmyFigther =null ,pmyFigther = (*stFighter)figtherBuff 将二进制数据强制转换的方式得到协议的内容,直接pmyFigther ->speed的方式使用数据?

如果可以,这样做除了不能跨语言(只能在c与C/C++之间,与C#(好像C#也可以强制转换)之间通信)之外,还有什么缺点吗?
是不是如果两端机器的大小端不一样就会出问题?

...全文
189 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-11-06
  • 打赏
  • 举报
回复
大尾巴猫 2017-11-05
  • 打赏
  • 举报
回复
只要字节序列和协议相符,用什么语言以及如何实现没关系
sdghchj 2017-11-05
  • 打赏
  • 举报
回复
必须保证都是C/C++语言,且大小端、对齐字节相同
paschen 版主 2017-11-05
  • 打赏
  • 举报
回复
比如不同语言结构体对齐方式可能不同,只要保证按存储的方式去解析结构体中的各数据,程序就能正常运行
小竹z 2017-11-05
  • 打赏
  • 举报
回复
如果是完全可控的项目开发,字节对其和大小端都一致的情况下,可以直接传递结构体。但往往我们在定义协议的时候,更多还是要考虑跨语言通信,因为你不知道那天需求就要提供对跨语言、跨平台的支持了。

64,676

社区成员

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

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