Как разбить шестнадцатеричную строку на std :: vector?

0

Учитывая шестнадцатеричную std::string как "09e1c5f70a65ac519458e7e53f36", как я могу разбить ее на куски двух цифр и сохранить их в std::vector<uint8_t>?

Я перебираю строку по шагам размера блока, но я не знаю, как преобразовать шестнадцатеричный кусок в число. Это то, что у меня есть до сих пор.

vector<byte> vectorify(string input, int chunk = 2)
{
    vector<uint8_t> result;
    for(size_t i = 0; i < input.length(); i += chunk)
    {
        int hex = input.substr(i, chunk);
        // ...
    }
    return result;
}
  • 1
    Что ты на сегодня сделал?
  • 0
    @MatsPetersson Я добавил это к вопросу.
Теги:
hex
stdvector
std
stl

3 ответа

3
Лучший ответ
#include <string>
#include <sstream>
#include <vector>
#include <iomanip>

int main(void)
{
    std::string in("09e1c5f70a65ac519458e7e53f36");
    size_t len = in.length();
    std::vector<uint8_t> out;
    for(size_t i = 0; i < len; i += 2) {
        std::istringstream strm(in.substr(i, 2));
        uint8_t x;
        strm >> std::hex >> x;
        out.push_back(x);
    }
    // "out" contains the solution
    return 0;
}
  • 0
    По любой причине, компилятор говорит, что >> не определен для операнда типа std::io_base который ссылается на std::hex я думаю. Я включил заголовок iomanip.
  • 0
    Добавлен #include <iomanip> .
Показать ещё 3 комментария
5

Это один лайнер :-)

#include <string>
#include <vector>
#include <boost/algorithm/hex.hpp>

int main(int argc, const char * argv[]) {
    std::string in("09e1c5f70a65ac519458e7e53f36");
    std::vector<uint8_t> out;
    boost::algorithm::unhex(in.begin(), in.end(), std::back_inserter(out));
    return 0;
    }
  • 0
    Это должен быть принят ответ.
-1

двух линий достаточно,

    char str[]="09e1c5f70a65ac519458e7e53f36";
    std::vector<uint8_t> fifth (str, str+ sizeof(str) / sizeof(uint8_t) );
  • 1
    Это дало бы мне коды ASCII для строки. Вместо этого я хотел бы, чтобы строковые символы интерпретировались как шестнадцатеричные цифры.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню