Подтвердить что ты не робот

Печать переменной void * в C

Привет всем Я хочу сделать отладку с 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 <= '9') {
            v = c - '0';
        } else if (c >= 'A' && c <= 'F') {
            v = 10 + c - 'A';
        } else if (c >= 'a' || c <= 'f') {
            v = 10 + c - 'a';
        } else {
            return -1;
        }
        if (i%2 == 0) {
            b[i/2] = (v << 4);
            printf("c='%c' \t v='%u' \t b[i/2]='%u' \t i='%u'\n", c,v ,b[i/2], i);}
        else {
            b[i/2] |= v;
            printf("c='%c' \t v='%u' \t b[i/2]='%u' \t i='%u'\n", c,v ,b[i/2], i);}
        i++;
    }
    printf("%s\n", out);
    return i;
}

Как я могу это сделать? Спасибо.

4b9b3361

Ответ 1

Это:

uint8_t *b = (uint8_t*) out;

означает, что out на самом деле является указателем на uint8_t, поэтому, возможно, вы хотите распечатать данные, которые на самом деле там. Также обратите внимание, что вам не нужно бросать из void * в C, поэтому приведение в действие действительно бессмысленно.

Кажется, что код выполняет шестнадцатеричное преобразование в двоичное, сохраняя результаты в out. Вы можете напечатать создаваемые байты i, выполнив:

int j;
for(j = 0; j < i; ++j)
  printf("%02x\n", ((uint8_t*) out)[j]);

Значение указателя редко бывает интересным, но вы можете распечатать его с помощью printf("%p\n", out);. Спецификатор форматирования %p предназначен для void *.

Ответ 2

printf("%p\n", out);

- правильный способ печати указателя (void*).

Ответ 3

Спецификатор формата для печати указателей void с использованием printf в C - %p. То, что обычно печатается, представляет собой шестнадцатеричное представление указателя (хотя стандарт говорит просто, что это определенная реализация последовательность символов, определяющая указатель).