c - C memcpy 字节缓冲区到打包结构,好决定吗?
问题描述
我知道将缓冲区类型转换为 struct 违反了严格的别名规则,并且它不可移植
但是,memcpy() 是一个缓冲区来构造带有属性打包的结构而不是使该规则无效,这是一个好的决定,而不是解析缓冲区的内容?让我们记住,两者总是有一个固定的大小
解决方案
如果您已确保打包结构在您希望支持的所有目标平台上按需要布置字节,那么将字节复制到结构中memcpy
,然后通过结构成员访问它们就可以了。
根据具体情况,可能建议将结构成员复制到普通(未打包)结构中以供进一步使用,这样打包结构中的未对齐成员就不会被重复访问,这可能是低效的。最终,这可能等同于发出多次memcpy
调用以将字节从缓冲区复制到正常结构的各个成员中。
使用memcpy
肯定至少与解析缓冲区一样有效,就像memcpy
使用数据可以做的最简单的事情一样。但是它是否更有效或相同取决于您将进行哪种解析。一旦您在结构中拥有数据,您仍然必须以应用程序需要的任何方式对其进行操作,因此这memcpy
似乎不会消除任何必须完成的实际工作。
推荐阅读
- javascript - 如何为类似液体的模板语言编写简单的 peg 语法?
- elasticsearch - 我怎样才能得到明显的结果?
- excel - VBA BS 期权定价:为什么会出现编译错误?
- javascript - 来自ajax post的json_decode字符串时出错
- rest - REST API Get 和 Post When 应该选择正确的一个
- c - 为什么 C 程序中两个函数相互调用会在 linux 上出现分段错误?
- c# - Cosmos db OFFSET LIMIT 子句不起作用
- graphviz - 如何在系统路径上放置点(graphviz 相关)?
- python - 在 Python 中重塑数据(列表/数组)
- java - 如何反序列化不同格式的日期:YYYY-MM-DD 和 YYYY-MM