【发布时间】:2019-10-10 21:13:23
【问题描述】:
我有一个程序创建一些混合了人类可读文本和控制字节(包括空字节)的字节字符串。为了调试这些字符串,我想要一个打印这些字符串的函数,给定一个指针和一个大小,我可以在屏幕上读取可打印的 ASCII 字符,以及不可打印的十六进制值那些(à la Python),例如
first string\x00second string\x00\x01
到目前为止,我有一个只打印可打印字符的函数:
void print_bytes(unsigned char *bs, size_t size) {
size_t i;
for (i = 0; i < size; i++) {
fputc(bs[i], stdout);
}
printf("\n");
}
除此之外,我只看到在线示例将所有内容打印为十六进制序列,这无助于我理解字符串的内容。
如何改进上述功能以打印不可打印字符的十六进制值?
【问题讨论】:
-
如果你理解这些例子,是什么阻止你检查字符是否可打印,如果可以输出它,如果不是,则以十六进制输出?
-
ctype.h提供了isprint()宏,可以简化你的if (isprint (c)) { /* print it */ } else { /* output hex */ } -
大卫,谢谢。这就是我正在寻找的函数类型。
-
请将此作为答案并标记。它可以帮助其他人找到将隐藏在 cmets 中的解决方案,并且问题仍将被列为未回答。