加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

对C中的字节字段使用char *或void *或其他内容?

发布时间:2020-12-16 09:57:34 所属栏目:百科 来源:网络整理
导读:我有一些字节字段,其中包含不同数字类型的字段.然后传递这些字段的指针并作为成员存储在其他类中. 我应该使用char *或void *作为指针类型吗? 目前,我看到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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读