我让任务在一行中打印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
打印数组的每个元素。
如何解决此问题?
答案 0 :(得分:1)
使用格式化的输出运算符<<
时,它将以 as 字符形式打印字符。您需要将值转换为unsigned
才能打印其实际整数值:
ss << "0x" << std::hex << static_cast<unsigned>(array[i]) << ", ";