首页 > 解决方案 > C memcpy 字节缓冲区到打包结构,好决定吗?

问题描述

我知道将缓冲区类型转换为 struct 违反了严格的别名规则,并且它不可移植

但是,memcpy() 是一个缓冲区来构造带有属性打包的结构而不是使该规则无效,这是一个好的决定,而不是解析缓冲区的内容?让我们记住,两者总是有一个固定的大小

标签: cstructmemcpy

解决方案


如果您已确保打包结构在您希望支持的所有目标平台上按需要布置字节,那么将字节复制到结构中memcpy,然后通过结构成员访问它们就可以了。

根据具体情况,可能建议将结构成员复制到普通(未打包)结构中以供进一步使用,这样打包结构中的未对齐成员就不会被重复访问,这可能是低效的。最终,这可能等同于发出多次memcpy调用以将字节从缓冲区复制到正常结构的各个成员中。

使用memcpy肯定至少与解析缓冲区一样有效,就像memcpy使用数据可以做的最简单的事情一样。但是它是否更有效或相同取决于您将进行哪种解析。一旦您在结构中拥有数据,您仍然必须以应用程序需要的任何方式对其进行操作,因此这memcpy似乎不会消除任何必须完成的实际工作。


推荐阅读