c - 如何打印可打印字符和 '\n' 、 '\t' 等字符

标签 c printing

我正在尝试显示 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/

相关文章:

c++ - !(variable) 和 (!variable) 之间的区别

javascript - 如何使用 Node.js 将 docx 文件打印到打印机

java - (PDFBox)java.awt.print.PrinterException : Printer is not accepting job

C - 无法打印动态数组值

java - Java中的远程打印模块

到目前为止在 snprintf 中写入的字符

time_t 的自定义时间结构

c - 如何使用asm中变量的数字创建标签

c - C 中的 3D 数组及其内容打印

javascript - 未捕获的类型错误 : Cannot read property 'outerHTML' of null