簡體   English   中英

如何打印可打印字符和'\\ n','\\ t'等字符

[英]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>

這是很難理解的。

編輯2

我發現。 此代碼按需工作。

  if (isprint(data[i]) || isspace(data[i]))

不管怎么說,還是要謝謝你。

我發現。 此代碼按需工作。

  if (isprint(data[i]) || isspace(data[i]))

–擦除

由於這些字符ASCII值是空格,因此無法使用"%c"格式說明符看到它們。 您需要做的是使用printf的十六進制字符串格式說明符,如下所示:

printf("%x", data[i]);

注意: "%x" (小寫)和"%X" (大寫)表示顯示字符的十六進制值,而不是實際的ASCII值。

我還要注意,以這種方式格式化字符串將為您提供原始數據。 這就是它在內存中的外觀,或者如果是通過導線傳輸的外觀。 因此, \\n0x0A\\t0x09

有關所有說明符的含義的詳細參考,請參見以下鏈接。

http://www.cplusplus.com/reference/cstdio/printf/

另外,這是指向ASCII表的另一個鏈接。

https://www.techonthenet.com/ascii/chart.php

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM