У меня есть блок памяти, представленный в виде коллекции шестиугольников. Это рассматривается в формате шестнадцатеричного дампа, где значение левого столбца - это первые две шестнадцатеричные цифры смещения в этой строке. Заголовок столбца для каждого байта - это последняя цифра этого смещения. Это выглядит примерно так (я сокращенная некоторые части, чтобы сэкономить время/место):Как найти/распечатать смещение hexdump в C
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++;
}
Но вместо распечатки правильного значения, она выдает что-то вроде «800419B1» и дает мне предупреждение, что говорит «формат„02X“ожидает беззнаковый INT ', но Аргумент 3 имеет тип 'uint8_t *' "
Является ли смещение чем-то, что я должен отслеживать, когда я иду, или это то, что я могу получить от указателя? Если да, то как мне это сделать?