调试日志输出或者屏幕输出,提示信息输出等等都需要将字符串打印出来。大多数情况下,字符串由下位机自行管理,打印输出会正常显示。但也有的时候要输出的字符串可能由用户输入,可能保存到flash中等存储设备,而再读出时可能出现错误等异常情况。如果此时,仅仅机械的强制输出到屏幕,或者打印出来,往往轻则会出现乱码现象,甚至,可能出现系统crash的严重问题。所以,在输出字符串之前需要对待输出字符串进行一次字符有效性过滤,并将非打印字符通过转义符的方式输出,以保证系统显示正常。
下面这段程序代码参考自Linux内核中输出字符串到终端,其简单,有效的过滤非打印字符,并将其转义为\\x%02x的方式输出。供大家参考使用
void print_ch(const char *buf, uint32_t len)
{
char ch;
while (len--)
{
ch = *buf++;
if (ch == '\\')
{
printf("\\\\");
}
else if (!ch && !len)
{
;
}
else if (ch < 32 || ch == 127)
{
printf("\\x%02x", ch);
}
else
{
putchar(ch);
}
}
}
我要赚赏金
