如何在C中查找/打印hexdump的偏移量

时间:2015-04-04 01:15:00

标签: c pointers hexdump

我有一块内存,表示为十六进制的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;

当我走的时候,偏移是我应该跟踪的东西,还是我可以从指针得到的东西?如果是这样,我该怎么做?

1 个答案:

答案 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);
    }
}