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

使用void指针在c中存储128位数

发布时间:2020-12-16 10:12:35 所属栏目:百科 来源:网络整理
导读:我正在学习c.作为实验,我试图实现128位加法和乘法. 我想使用void指针执行此操作,如下所示: void* x = malloc(16);memset(x,16); 是否可以读取和写入x的第i位?我理解如何使用标准数据类型的按位运算来执行此操作,但是当我尝试对void指针使用按位运算时,编译
我正在学习c.作为实验,我试图实现128位加法和乘法.

我想使用void指针执行此操作,如下所示:

void* x = malloc(16);
memset(x,16);

是否可以读取和写入x的第i位?我理解如何使用标准数据类型的按位运算来执行此操作,但是当我尝试对void指针使用按位运算时,编译器会抱怨无效的操作数.一般来说,我感兴趣的是,是否有可能对任意大小的内存块进行malloc,然后在c中操作每个单独的位?

解决方法

尽管你可以将malloc的结果强制转换为你想要的任何指针类型,但是在编译指针类型时,C标准令人惊讶地(尽管在逻辑上)是不灵活的.

为了执行位和字节分析,要使用的安全类型是char *或unsigned char *:

unsigned char * x = malloc(16);

(我总是选择unsigned char,因为有些平台有一个1的补码签名char类型,粗略地说,这是一个痛苦的问题).

然后,您可以使用x上的指针算法逐个字节地操作内存块.请注意,标准声明sizeof(char)和sizeof(unsigned char)为1,因此这种类型的指针算法将遍历整个内存块而不会遗漏任何位.

至于逐位检查,标准定义的CHAR_BIT将告诉您一个字节中有多少位. (通常是8,但假设这是不明智的.)

最后,不要忘记在某个时候调用free(x).

(编辑:李大同)

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

    推荐文章
      热点阅读