如果我有一个像:
这样的缓冲区uint8_t buffer[32];
并且它完全被值填充,我怎么能用十六进制表示法将它变成字符串流,在小值上用0填充?
我试过了:
std::stringstream ss;
for (int i = 0; i < 32; ++i)
{
ss << std::hex << buffer[i];
}
但是当我从字符串流中取出字符串时,我遇到了一个问题:值为&lt;的字节数16只用一个字符代表,我希望它们是0填充。
例如,如果数组中的字节1和2为{32} {4},我的字符串流将具有:
204 instead of 2004
我可以将格式化应用于stringstream以某种方式添加0-padding吗?我知道我可以用sprintf做到这一点,但是这些流已经被用于获取大量信息,并且以某种方式实现这一点将是一个很大的帮助。
答案 0 :(得分:44)
std::stringstream ss;
ss << std::hex << std::setfill('0');
for (int i = 0; i < 32; ++i)
{
ss << std::setw(2) << static_cast<unsigned>(buffer[i]);
}
答案 1 :(得分:6)
查看流修饰符:std::setw
和std::fill
。