如何将十六进制字符串拆分为std :: vector?

dan*_*jar 1 c++ hex stl std stdvector

给定一个十六进制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;
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*low 6

这是一个班轮:-)

#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;
    }
Run Code Online (Sandbox Code Playgroud)


tim*_*rau 5

#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;
}
Run Code Online (Sandbox Code Playgroud)

  • 现在可以了。我必须使用“int”作为“x”的类型,并在返回向量之前将其转换。否则,字符串流认为我想读取单个字符而不是数字。 (5认同)