c – 以十六进制表示形式将缓冲区转换为字符串流:

如果我有一个缓冲区:

uint8_t buffer[32];

它被完全填满了值,我怎么能把它变成一个字符串流,十六进制表示,在小值上使用0填充?

我试过了:

std::stringstream ss;
for (int i = 0; i < 32; ++i)
{
    ss << std::hex << buffer[i];
}

但是当我把字符串从字符串流中取出时,我有一个问题:值为< 16只需要一个字符代表,我希望他们被填补0。 例如,如果数组中的字节1和2是{32} {4},我的字符串流将具有:

204 instead of 2004

我可以将格式化应用到stringstream以添加0填充吗?我知道我可以用sprintf这样做,但是这些流已经被用于很多信息,这将是一个非常有帮助的方式来实现这一点。

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]);
}
http://stackoverflow.com/questions/7639656/getting-a-buffer-into-a-stringstream-in-hex-representation

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c – 以十六进制表示形式将缓冲区转换为字符串流: