C / C ++:处理结构和位域的独立于平台的方法

时间:2011-08-26 18:47:57

标签: endianness bit-fields platform-independent unions

我正在开发一个项目,将古老的Solaris(sparc)目标应用程序转换为Linux。语言是C / C ++,大部分代码都是由电子工程师编写的 - 也就是那些做了大量嵌入式设备工作的人。

因此,工会和位域遍布整个地方。处理结构和处理结构非常简单那些不涉及位域或联合的东西,但是由于将其解释为MSB或LSB的惯例,以及字节排序,将代码转换为x86 linux可能会相当恼人。

我正在寻找一种将旧代码带入21世纪的简洁方法。任何建议(例子,研究论文,白皮书,书籍建议等)都非常受欢迎。

1 个答案:

答案 0 :(得分:1)

这些结构是用于将数据保存为文件还是通过某种串行/网络链接发送?当数据要从机器移动到另一台机器时,您只需要担心字节顺序。

在内存数据以外的其他结构中使用位域时,使用位域是一种非常糟糕的做法。在整个程序中保持结构原样可能会更好,只需修改读/写它们的函数即可。此时,您可以干净地完成字节顺序转换。