【问题标题】:How to print uint8_t bytes array?如何打印 uint8_t 字节数组?
【发布时间】:2018-08-10 07:10:02
【问题描述】:

我有以下代码:

uint16_t BufferSize = BUFFER_SIZE;
uint8_t Buffer[BUFFER_SIZE];

缓冲区大小为64字节,填充为:

Buffer[0] = 'P';
Buffer[1] = 'I';
Buffer[2] = 'N';
Buffer[3] = 'G';
Buffer[4] = 0;
Buffer[5] = 1;
Buffer[6] = 2;
Buffer[7] = 3;
Buffer[8] = 4;
.
.
.
Buffer[63] = 59;

我正在尝试使用以下方法打印缓冲区的内容:

for( i = 0; i < BufferSize; i++ )
{

    PRINTF(Buffer[i]);

}

也试过了:

for( i = 0; i < BufferSize; i++ )
{
    PRINTF((const char*) Buffer[i]);
}

但它不起作用。

【问题讨论】:

  • “但它不起作用。”edit您的问题并解释问题所在。另外PRINTF不是标准的C函数,请给出它的定义。
  • 如何打印取决于您对数组的使用情况。如果您存储可打印和不可打印的字符,您需要做出决定。打印一个 hexdump 或其他东西。如需任何帮助,您需要显示您的 PRINTF 宏是什么。

标签: c arrays printf uint8t


【解决方案1】:

您应该参考printf 的语法。 C 对小写字母和大写字母的处理方式不同,所以你应该这样写:

printf("%c", Buffer[i])

【讨论】:

    【解决方案2】:
    1. PRINTF 全部大写不是标准的 C 函数; C 区分大小写,因此您需要printf
    2. 即便如此,当打印任意字符串时,您不会直接将字符串作为第一个参数传递给printf,因为它可能会将其中的一些字符解释为其他参数的占位符(比如字符串包含%。 ..)。一般来说,几乎任何情况下,当一个printf-like 函数被调用时,除了字符串文字之外的任何东西都是可疑的。因此,您需要printf("%s", (const char *)Buffer)fputs((const char *)Buffer, stdout)(通常效率稍高一些)。
    3. 但是,所有这些函数都希望使用以 NUL 结尾的字符串,而不是计数缓冲区,因此在您的情况下,它们将在 PING 之后的 NUL 处停止。要实际输出整个缓冲区,您必须使用未格式化的输出函数,例如fwrite:fwrite(buffer, BufferSize, 1, stdout)

    【讨论】:

      【解决方案3】:

      putchar 更好更快。

      int putchar(int character);
      

      出错时返回EOF,否则返回charater本身。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-05
        • 1970-01-01
        • 2011-12-07
        • 1970-01-01
        • 2011-09-21
        • 2018-10-17
        • 1970-01-01
        相关资源
        最近更新 更多