C语言 以十六进制打印字符串



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

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

"oneliner", no.此外,您的代码看起来已损坏。

你不能那样使用sizeof,你可能的意思是strlen().

为了安全起见,您需要将角色转换为无符号类型。

所以,像这样的东西,也许:

void print_hex(const char *s)
{
  while(*s)
    printf("%02x", (unsigned int) *s++);
  printf("n");
}

请注意,我不调用strlen(),因为当一次可以时,迭代字符串两次是没有意义的:)。

我认为从技术上讲,"字符串"在这里具有误导性;您似乎正在打印uint8_t值的数组(不一定以null结尾)。

在任何情况下,您都需要一个循环。如果你可以使用C99,你可以写

for (size_t i = 0; i < sizeof(string); ++i) printf("%02x", string[i]);

如果数组 null 结尾,并且您不需要 string 的原始值(按值传递指针时通常就是这种情况),则可以

static void printArray(const uint8_t *string)
{
  while (*string) printf("%02x", *string++);
}

最新更新