这种以十六进制打印字符串的简短方法是否正确?如果不是,应该如何解决?
uint8_t *m = string;
int c = sizeof(string);
while(c--){
printf("%02x ", *(m++));
}
没有“oneliner”,没有。此外,您的代码看起来已损坏。
你不能那样使用sizeof
,你可能是说strlen()
.
为了安全起见,您需要将字符转换为无符号类型。
所以,像这样的东西,也许:
void print_hex(const char *s)
{
while(*s)
printf("%02x", (unsigned int) *s++);
printf("\n");
}
请注意,我不调用strlen()
,因为一次就可以遍历字符串两次是没有意义的。:)
我认为从技术上讲,“字符串”在这里具有误导性;您似乎正在打印一个值数组(不一定以空结尾)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++);
}