在C中打印void *变量
大家好我想用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 = '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;
暗示out
实际上是指向uint8_t
,所以也许你想要打印实际存在的数据。 另请注意,您不需要在C中使用void *
进行强制转换,因此强制转换非常无意义。
代码似乎是进行hex到二进制转换,将结果存储在out
。 您可以通过执行以下操作打印i
生成的字节:
int j; for(j = 0; j < i; ++j) printf("%02x\n", ((uint8_t*) out)[j]);
指针值本身很少有趣,但您可以使用printf("%p\n", out);
打印它printf("%p\n", out);
。 %p
格式说明符用于void *
。
printf("%p\n", out);
是打印(void*)
指针的正确方法。
在C中使用printf
打印void指针的格式说明符是%p
。 通常打印的是指针的hex表示(尽管标准简单地说它是定义指针的实现定义的字符序列)。