我正在学习C语言中的结构体填充和压缩。 我有一个疑问,由于我已经了解到填充取决于计算机架构,那么它会影响跨机器通信吗?也就是说,如果在一台计算机上创建的数据被另一台计算机读取,会出现什么问题。 在这种情况下,如何避免这个问题。
我正在学习C语言中的结构体填充和压缩。 我有一个疑问,由于我已经了解到填充取决于计算机架构,那么它会影响跨机器通信吗?也就是说,如果在一台计算机上创建的数据被另一台计算机读取,会出现什么问题。 在这种情况下,如何避免这个问题。
只有在你编译用于其他架构的代码使用了不同的填充方案时,才会受到影响。
为了帮助缓解问题,我建议您使用无填充的结构体。在需要填充时,请使用占位符(例如char reserved[2]
)。此外,请勿使用位字段!它们不具备可移植性。
您还应该注意其他与架构相关的问题。特别是字节序和数据类型大小。如果需要更好的可移植性,您可能希望将其串行化和反串行化为一个字节流,而不是将其强制转换为struct
。
char
、int
、long
、long long
等),以及更多其他问题。 - Anthony