我有一块内存,表示为十六进制的nybbles集合。这是以十六进制转储格式查看的,其中左列的值是该行中偏移量的前两个十六进制数字。每个字节的列标题是该偏移量的最后一位。它看起来像这样(我缩写了一些部分以节省时间/空间):
0 1 2 3 ..... 9 A B .... F
0 AD 1E 08 ......................
1 .......
. .......
. .......
9 .......
A .......
. .......
F .......
10.......
11.......
. .......
1E.. DE
1F.......
我想使用指针将该内存块传递给特定字节。然后我想打印该偏移的十六进制表示(例如,DE将在偏移1E1处)。我的代码现在看起来像:
uint8_t *p = baseAddr;//create a pointer that points to the first byte of memory in the array
for(int i = 0; i < Length; i++){//use a for loop to move p from the start to the maximum length of the specified region
if(*p == Byte){//if it matches the byte you're looking for
fprintf(Out, "%02X ", p);//print the location of the current byte
}
p++;
}
但它没有打印出正确的值,而是打印出像&#34; 800419B1&#34;并给我一个警告,说明&#34;格式&#39; 02X&#39;期望类型&#39; unsigned int&#39;但是参数3的类型是“uint8_t *&#39;&#34;
当我走的时候,偏移是我应该跟踪的东西,还是我可以从指针得到的东西?如果是这样,我该怎么做?
答案 0 :(得分:2)
从p
减去基地址以获得偏移量:
fprintf(Out, "%02X ", p - baseAddr);
您实际上不需要p
,只能使用i
:
for (int i = 0; i < Length; i++) {
if (baseAddr[i] == Byte) {
fprintf(Out, "%02X ", i);
}
}