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

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;
}

(编辑:李大同)

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

    推荐文章
      热点阅读