对C中的字节字段使用char *或void *或其他内容?
我有一些字节字段,其中包含不同数字类型的字段.然后传递这些字段的指针并作为成员存储在其他类中.
我应该使用char *或void *作为指针类型吗? 目前,我看到char *只有一个优点:你不能取消引用void *.当从字段中读取值时,这不是问题,因为我必须转换为相应的指针类型.如果我想逐字节地写一个字段的普通副本,我首先需要将void *转换为char *,因此将它直接存储为char *会更容易. 或者有没有理由反对使用char *? 通常,我宁愿保持尽可能低的级别,因为我必须将字段传递给其他低级接口. 解决方法
使用char *作为内存blob是“易于使用”(例如逐字节操作),但是阅读和理解代码非常糟糕(但是你仍然可以在各种API中看到它).
如果您的数据只是一块内存,那么最好使用void *. 只有当您的数据是特定类型的数组(char,int,uint8_t,某些结构,……)时,才使用该类型的指针. 如果您需要将结构视为“字节数据”(例如计算哈希),您可以在内部将其视为“char *”(或uint8_t *或uint_32_t *或您需要的任何内容).但是,如果您不需要特定的内存布局,则公共API仍应无效*. 关键是:如果你有一个使用void *的API,你可以提供任何类型的指针(这是一个哈希函数的点).但是,如果使用char *,则总是需要reinterpret_cast. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |