使用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). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |