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