大家好,我想用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;
}
我该怎么做呢?谢谢。
发布于 2013-03-08 18:54:27
这一点:
uint8_t *b = (uint8_t*) out;
这意味着out
实际上是指向uint8_t
的指针,因此您可能希望打印实际存在的数据。还请注意,您不需要在C中从void *
进行强制转换,因此强制转换实际上是没有意义的。
代码似乎正在进行十六进制到二进制的转换,将结果存储在out
中。您可以通过执行以下操作来打印i
生成的字节:
int j;
for(j = 0; j < i; ++j)
printf("%02x\n", ((uint8_t*) out)[j]);
指针值本身很少有意义,但您可以用printf("%p\n", out);
打印它。%p
格式说明符是用于void *
的。
发布于 2013-03-08 18:51:12
printf("%p\n", out);
是打印(void*)
指针的正确方法。
发布于 2013-03-08 18:51:26
在C中使用printf
打印空指针的格式说明符是%p
。通常打印的是指针的十六进制表示(尽管标准简单地说它是定义指针的实现定义的字符序列)。
https://stackoverflow.com/questions/15292237
复制相似问题