在 c++ 中将uint8_t数组转换为字符串以在一行中打印

Convert array of uint8_t to string in c++ to print in one line

本文关键字:打印 一行 uint8 中将 c++ 转换 数组 字符串      更新时间:2023-10-16

我的任务是在一行中打印一个uint8_t数组,并使用给定的日志函数,即在一行中打印每条消息。所以,我想我必须合并字符串中的每个元素并打印。我尝试使用std::stringstream

uint8_t array[512];
std::stringstream ss;
for (int i = 0; i < array_len; i++)
{
ss << "0x" << std::hex << array[i] << ", ";
}
log_given_print("%s", ss.str().c_str()); // in fact you can replace by printf

它似乎效果很好。但是今天,我得到了奇怪的日志:

0xETX, 0xSOH, 0x%, 0xN, 0x

我 https://www.asciitable.com/检查了 ascii 表,发现它是一些字节,如 0x01、0x03。我认为问题%s,通常,我使用%x来打印数组的每个元素。

如何解决此问题?

使用格式化的输出运算符<<时,它会将字符打印为字符。您需要将值转换为例如unsigned能够打印其实际整数值:

ss << "0x" << std::hex << static_cast<unsigned>(array[i]) << ", ";