c – 在内存中读取/写入位
发布时间:2020-12-16 10:28:56 所属栏目:百科 来源:网络整理
导读:假设我给出了一个void *内存地址,我需要打印位于该内存地址中的位.我怎样才能做到这一点? 在我的处理器中,内存地址是32位,内存值也是32位,int也是32位. 所以我想这样做: unsigned int value = *memory_address; 然后通过简单的算术(一些mod和div操作)来获
假设我给出了一个void *内存地址,我需要打印位于该内存地址中的位.我怎样才能做到这一点?
在我的处理器中,内存地址是32位,内存值也是32位,int也是32位. unsigned int value = *memory_address; 然后通过简单的算术(一些mod和div操作)来获取保存在memory_address中的值的位. 例如,值mod 2将给出该值的最后一位,依此类推.但是从我所知道的(我期待不同的位)它不起作用.有什么想法吗? 还有,是否有人知道现成的C源代码“做”这样,从内存中读取/写入位? 解决方法
每个位将值移1,或者用1移位
unsigned int value = *((unsigned int*)memory_address); for( int i = 0; i < 32; i++) { printf("%d ",value >> i & 1); } 你也可以用数学运算符来做.您必须获取位值(2位到位索引的幂)并在每次迭代时减去该值以确保模数不返回我们之前看到的值: for( int i = 0; i < 32; i++) { int bit_value = (int)pow(2,i + 1); int num_bit_value = value % bit_value; printf("%d ",num_bit_value ? 1 : 0 ); value -= num_bit_value; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |