以十六进制打印字符串的这种简短方法是否正确?如果没有,应该如何解决?
uint8_t *m = string;
int c = sizeof(string);
while(c--){
printf("%02x ", *(m++));
}
答案 0 :(得分:17)
没有“oneliner”,没有。此外,你的代码看起来很糟糕。
你不能那样使用sizeof
,你可能是strlen()
。
您需要将字符转换为无符号类型才能安全。
所以,这样的话,也许是:
void print_hex(const char *s)
{
while(*s)
printf("%02x", (unsigned int) *s++);
printf("\n");
}
请注意,我不调用strlen()
,因为在一次执行时迭代字符串两次没有意义。 :)
答案 1 :(得分:2)
我认为技术上“字符串”在这里有误导性;您似乎正在打印uint8_t
值的数组(不一定是空终止的)。
无论如何你都需要一个循环。如果你可以使用C99,你可以写
for (size_t i = 0; i < sizeof(string); ++i) printf("%02x", string[i]);
如果数组 以空值终止,和,则不需要string
的原始值(这通常是传递指针的情况)按价值而言,你可以
static void printArray(const uint8_t *string)
{
while (*string) printf("%02x", *string++);
}