这种以十六进制打印字符串的简短方法是否正确?如果没有,应该如何修复?
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++);
}