Salut tout ce que je veux faire un débogage avec printf. Mais je ne sais pas comment imprimer la variable "out".
Avant le retour, je souhaite imprimer cette valeur, mais son type est nul *.
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;
}
Comment puis-je faire? Merci.
Cette:
uint8_t *b = (uint8_t*) out;
implique que out
est en fait un pointeur vers uint8_t
, donc vous voudrez peut-être imprimer les données qui sont réellement là. Notez également que vous n'avez pas besoin de lancer à partir de void *
En C, donc la distribution est vraiment inutile.
Le code semble faire une conversion hexadécimale en binaire, stockant les résultats dans out
. Vous pouvez imprimer les i
octets générés en faisant:
int j;
for(j = 0; j < i; ++j)
printf("%02x\n", ((uint8_t*) out)[j]);
Le valeur du pointeur lui-même est rarement intéressant, mais vous pouvez l'imprimer avec printf("%p\n", out);
. Le spécificateur de formatage %p
Est pour void *
.
printf("%p\n", out);
est la bonne façon d'imprimer un (void*)
pointeur.
Le spécificateur de format pour l'impression de pointeurs vides à l'aide de printf
en C est %p
. Ce qui est généralement imprimé est une représentation hexadécimale du pointeur (bien que la norme dise simplement qu'il s'agit d'une séquence de caractères définie par l'implémentation définissant un pointeur).