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

时间:2018-07-03 09:59:06

标签: c++

我让任务在一行中打印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

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

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

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

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