Я здесь, чтобы задать вам вопрос о разработке ядра (конкретно для процессоров x86), моя проблема заключается в следующем: я хочу показать шестнадцатеричный адрес любого указателя.
Я пробовал много вещей, выясняя для себя, но я врезался в эту стену.
Все функции печати я реализую сам и все они работают. Помните: я кодирую в автономной среде (материал GCC).
Вот что я делаю до сих пор:
void testPrintHex(void* someptr) {
const char* hexDigits = "0123456789ABCDEF";
uint32_t* ptr = (uint32_t*) someptr;
print("0x");
for(size_t i = 0; i < 32; i+=8) {
char c = ptr[i];
char low = c & 0x0F;
char high = (c >> 4) & 0x0F;
for(int j = 0; j <= 16; j++) {
char h = (hexDigits[j] >> 4) & 0x0F;
if(high == h) {
printChar(h);
}
}
for(int j = 0; j <= 16; j++) {
char l = hexDigits[j] & 0x0F;
if(low == l) {
printChar(l);
}
}
}
print("\n");
}
Я ожидал, что это напечатает адрес памяти этого указателя. Что я получаю? Это: 0x
Ой, есть 12 (2 пики, 2 счастливых лица, 6 квадратов и 2 черви) странных символов, которые Stack Overflow не показывал.
9
доA
с помощьюif
. Используйте что-то вродеprintChar(hexDigits[high])
иprintChar(hexDigit[low]);
- person Peter Cordes   schedule 05.01.2019A
совпадают с младшими 4 битами1
, поэтому ваш поиск не работает. - person Peter Cordes   schedule 05.01.2019