Привет всем Я хочу сделать отладку с printf. Но я не знаю, как напечатать переменную «out».
Перед возвратом я хочу напечатать это значение, но его тип недействителен *.
int hexstr2raw(char *in, void *out) { char c; uint32_t i = 0; uint8_t *b = (uint8_t*) out; while ((c = in[i]) != '\0') { uint8_t v; if (c >= '0' && c = 'A' && c = 'a' || c <= 'f') { v = 10 + c - 'a'; } else { return -1; } if (i%2 == 0) { b[i/2] = (v << 4); printf("c='%c' \tv='%u' \tb[i/2]='%u' \ti='%u'\n", c,v ,b[i/2], i);} else { b[i/2] |= v; printf("c='%c' \tv='%u' \tb[i/2]='%u' \ti='%u'\n", c,v ,b[i/2], i);} i++; } printf("%s\n", out); return i; }
Как я могу сделать? Благодарю.
Это:
uint8_t *b = (uint8_t*) out;
подразумевает, что на самом деле это указатель на uint8_t
, поэтому, возможно, вы хотите распечатать данные, которые на самом деле есть. Также обратите внимание, что вам не нужно бросать из void *
в C, поэтому отливка действительно бессмысленна.
Кажется, что код выполняет шестнадцатеричное преобразование в двоичном формате, сохраняя результаты. Вы можете напечатать сгенерированные байты i
, выполнив:
int j; for(j = 0; j < i; ++j) printf("%02x\n", ((uint8_t*) out)[j]);
Значение самого указателя редко интересно, но вы можете распечатать его с помощью printf("%p\n", out);
, Спецификатор форматирования %p
для void *
.
printf("%p\n", out);
это правильный способ печати указателя (void*)
.
Спецификатор формата для печати указателей void с использованием printf
в C равен %p
. То, что обычно печатается, представляет собой шестнадцатеричное представление указателя (хотя стандарт говорит просто, что это определенная реализация последовательность символов, определяющая указатель).