如何打印 uint8_t 字节数组?

How to print uint8_t bytes array?

我有以下代码:

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]);
}

但它不起作用。

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

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

只是 putchar 更好更快。

int putchar(int character);

returns EOF 出错,否则 charater 本身。

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