我试图从文本文件中获得十六进制内存地址,并移动3位,然后打印结果。内存地址是A3BC88A0,我只想打印A3BC8?但是,当我运行代码时,addr = A3BC88AO但result = 14779114。有人能帮我弄清楚为什么会发生这种情况或者该怎么做吗?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, const char * argv[])
{
FILE *f;
myfile = fopen("Test.txt", "r");
unsigned addr;
fscanf(f, "%x", &addr);
printf("%xn",addr);
unsigned result = addr >> 3;
printf("%xn",result);
fclose(myfile);
return 0;
}
您想要的不是移位3位,而是移位3个十六进制数字,每个数字是4位。所以这样做:
unsigned result = addr >> 12;
>> 3
将值移位3位,然而您要求A3BC88A0
移位3位(半字节)以导致A3BC8
将行改为:
unsigned result = addr >> (3*4);
(我用3*4
而不仅仅是12
来强调你想要移动的nybles)。
注意:一个十六进制数字是4位,也就是半个字节,这是一个nybble(不是一个很常见的术语)