如何打印uint8_t字节数组?

时间:2018-08-10 07:10:03

标签: c arrays printf uint8t

我有以下代码:

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

但是它不起作用。

3 个答案:

答案 0 :(得分:1)

  1. PRINTF所有大写字母都不是标准的C函数; C区分大小写,因此您需要printf
  2. 即使如此,在打印任意字符串时,也不会直接将字符串作为第一个参数传递给printf,因为它可能会将其某些字符解释为其他参数的占位符(例如,字符串包含{{ 1}} ...)。通常,几乎所有情况下都可能会怀疑使用类似%的函数但字符串文字之外的任何东西。因此,您需要printfprintf("%s", (const char *)Buffer)(通常效率更高)。
  3. 但是,所有这些函数都希望可以使用NUL终止的字符串,而不可以使用已计数的缓冲区,因此,在您的情况下,它们将在fputs((const char *)Buffer, stdout)之后在NUL处停止。要实际输出整个缓冲区,必须使用未格式化的输出函数,例如PINGfwrite

答案 1 :(得分:0)

您应参考printf的语法。 C对小写和大写字母的处理方式不同,因此您应该编写如下内容:

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

答案 2 :(得分:0)

putchar更好,更快。

int putchar(int character);

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