我正在尝试显示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 trame:
<ul>
<li>Foo</li>
<li>Bar</li>
</ul>
成为:
<ul><li>Foo</li><li>Bar</li></ul>
这是不太明白的。
if (isprint(data[i]) || isspace(data[i]))
非常感谢。
答案 0 :(得分:1)
我发现了。该代码可以按需工作。
if (isprint(data[i]) || isspace(data[i]))
–擦除
答案 1 :(得分:0)
由于这些字符的ASCII值是空白区域,因此您不会使用"%c"
格式说明符来查看它们。您需要做的是使用printf
中的十六进制字符串格式说明符,如下所示:
printf("%x", data[i]);
注意: "%x"
(小写)和"%X"
(大写)表示显示字符的十六进制值而不是实际的ASCII值。
我还应该注意,以这种方式格式化字符串将为您提供原始数据。这就是它在内存中的样子,或者如果在线上传输它会是什么样子。因此,\n
为0x0A
,\t
为0x09
请参阅以下链接,以获取有关所有说明符含义的绝佳参考。
http://www.cplusplus.com/reference/cstdio/printf/
此外,这是另一个指向ASCII表的链接。
https://www.techonthenet.com/ascii/chart.php
希望这有帮助!