Подтвердить что ты не робот

Получение буфера в строковый поток в шестнадцатеричном представлении:

Если у меня был буфер вроде:

uint8_t buffer[32];

и он был полностью заполнен значениями, как я мог получить его в stringstream, в шестнадцатеричном представлении, с 0-padding на небольших значениях?

Я пробовал:

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

но когда я беру строку из строкового потока, у меня есть проблема: байты со значениями < 16 возьмется только один символ, чтобы представить, и я бы хотел, чтобы они были заполнены 0.

Например, если байты 1 и 2 в массиве были {32} {4}, мой stringstream имел бы:

204 instead of 2004

Могу ли я применить форматирование к stringstream, чтобы как-то добавить 0-padding? Я знаю, что могу сделать это с помощью sprintf, но потоки уже используются для получения большой информации, и это было бы очень полезно для достижения этого как-то.

4b9b3361

Ответ 1

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]);
}

Ответ 2

Посмотрите на модификаторы потока: std::setw и std::fill.