以十六进制打印字符串

时间:2012-10-04 10:17:28

标签: c string hex

以十六进制打印字符串的这种简短方法是否正确?如果没有,应该如何解决?

uint8_t *m = string;
int c = sizeof(string);
while(c--){
    printf("%02x ", *(m++));
}

2 个答案:

答案 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++);
}