![](/img/trans.png)
[英]How can I print a string in C such that it will show characters like \n, \o, etc?
[英]How to print printable characters and characters like '\n', '\t', etc
我正在嘗試顯示一個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 Tram:
<ul>
<li>Foo</li>
<li>Bar</li>
</ul>
成為:
<ul><li>Foo</li><li>Bar</li></ul>
這是很難理解的。
我發現。 此代碼按需工作。
if (isprint(data[i]) || isspace(data[i]))
不管怎么說,還是要謝謝你。
我發現。 此代碼按需工作。
if (isprint(data[i]) || isspace(data[i]))
–擦除
由於這些字符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
希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.