我正在尝试显示 HTTP 帧。问题是有些字符无法识别。我使用 isprint 函数。
这是我创建的函数:
void printAscii(const int dataLength, const char *data){
if (dataLength <= 0) {
printf("No data (data length <= 0)\n");
} else {
printf("Warning: Unsupported characters are not displayed.\n\n");
size_t i;
printf("|- ");
for (i = 0; i < dataLength; i++) {
if (isprint(data[i])) {
printf("%c", data[i]);
}
if (data[i] == '\n') {
printf("|- ");
}
}
}
}
问题是像“\n”和“\t”这样的字符也没有显示。 我想在我的函数中添加额外的条件
if (isprint(data[i]) || data[i] == '\n' || data[i] == '\t')
但我想知道是否没有更“干净”的方法? 我开始 C 语言的时间并不太长,所以如果我在函数中犯了错误,请不要犹豫。
编辑
我的问题可能不够清楚。
我的项目是一个帧分析器(pcap),我进入了 HTTP 部分。该帧仅包含 ASCII,因此显示此类帧相对容易。问题是某些字符不会直接显示(例如图像编码),因此我决定忽略这些字符。问题是 isprint () 字符,如 '\n'、'\t' 等......也没有显示,所以我的显示不太“漂亮”。
例如,这个 HTTP 帧:
<ul>
<li>Foo</li>
<li>Bar</li>
</ul>
成为:
<ul><li>Foo</li><li>Bar</li></ul>
这不太容易理解。
编辑2
我发现了。此代码按预期工作。
if (isprint(data[i]) || isspace(data[i]))
无论如何,谢谢。
最佳答案
我发现了。此代码按预期工作。
if (isprint(data[i]) || isspace(data[i]))
——删除
关于c - 如何打印可打印字符和 '\n' 、 '\t' 等字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41077211/