こんにちは、printfでデバッグを行いたいと思います。しかし、「out」変数を出力する方法がわかりません。
戻る前に、この値を出力したいのですが、その型はvoid *です。
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;
}
どのようにできるのか?ありがとう。
この:
_uint8_t *b = (uint8_t*) out;
_
は、out
が実際に_uint8_t
_へのポインタであることを意味するため、実際にそこにあるデータを印刷したいかもしれません。また、Cの_void *
_からキャストする必要がないため、キャストは本当に無意味です。
コードは16進数からバイナリへの変換を実行して、結果をout
に格納しているようです。 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*)
ポインターを印刷する正しい方法です。
Cでprintf
を使用してvoidポインターを印刷するための書式指定子は%p
。通常印刷されるのは、ポインターの16進表現です(ただし、標準では、ポインターを定義する実装定義の文字シーケンスであると単純に述べています)。