我正在开发热升级功能,需要打包一个结构数组以便新版本找到它们。我真的想避免为每个可能的版本转换添加转换函数。这是否合理?
结构最可能的变化是将来要将更多字段添加到结构中,如果发生这种情况,那么新字段的默认值将可用。我也将很快面临将结构数组保存到配置文件中的任务,因此可以为可应用于热升级和配置保存的答案提供额外的功劳。
我不担心炎热的更新机制我只是给它一个指针和大小和它梦幻般的神奇:)将C结构发送到未来版本的代码?
2
A
回答
10
的结构最可能的变化是更多的领域是将来添加到结构中,如果发生这种情况,则新字段的默认值将可用。
从版本1开始,每个结构始终包含sizeof(myStruct)
作为字段。然后,当您需要添加新字段时,请始终在每个结构的末尾执行此操作,而不要在中间。现在,当接收(或从文件中读取数据)时,首先只读取大小字段,以便知道它后面会有多少字节。如果接收器/阅读器确定的尺寸小于sizeof(myStruct)
,那么您知道缺少某些内容,并且需要缺省值。
7
我推荐使用Google的protocol buffers之类的东西,它会自动处理版本控制。如果您将新字段添加到消息中,则处理起来非常容易。
相关问题
- 1. 发送结构指针到函数C
- 2. 将此C#代码重构为更加优雅的版本
- 3. C++ Winsock结构发送/ recv
- 4. 对C座发送结构
- 5. visual C++强制发布版本使用调试版本代码
- 6. 警告(代码1681):“密码”已取消,将在未来的版本
- 7. 使用WM_COPYDATA将结构从C++发送到WPF
- 8. 如何将表单数据“发送”到C#代码,然后让C#“发送”数据回来?
- 9. 将代码从vim发送到stata
- 10. 定义打包版本的C结构
- 11. 构建Android项目时未识别的新版本代码
- 12. 发送指向C#结构体的指针到C++ DLL
- 13. 将C++代码从结构迁移到类
- 14. 伪代码结构到Mysql?
- 15. C#,将值发送到文本框
- 16. Haskell数据结构来模拟替代版本编号方法
- 17. Android代码发送无误但仍未发送的短信
- 18. 通过c socket发送结构
- 19. 开放MPI发送C结构
- 20. 将未版本控制的目录结构合并到SVN仓库中
- 21. 版本控制的开发代码
- 22. 如何将未来版本的git补丁应用到过去的版本?
- 23. 离子版本IOS - 发行版本失败结果错误代码65
- 24. .Net4 \ vs2010版本的c#代码片段
- 25. 将代码重构为较新版本的最佳方法
- 26. 将未版本化的源代码与git存储库匹配
- 27. 将C++代码转换为C,结构数组
- 28. Android NDK版本代码方案发布APK每架构
- 29. 将代码推送到Bitbucket
- 30. 将文本从记事本发送到未聚焦的Form1
我在这里找到了一个C(非++)端口:http://code.google.com/p/protobuf-c/ – 2009-07-17 22:13:17