Учитывая шестнадцатеричную 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;
}
#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;
}
>>
не определен для операнда типа std::io_base
который ссылается на std::hex
я думаю. Я включил заголовок iomanip.
#include <iomanip>
.
Это один лайнер :-)
#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;
}
двух линий достаточно,
char str[]="09e1c5f70a65ac519458e7e53f36";
std::vector<uint8_t> fifth (str, str+ sizeof(str) / sizeof(uint8_t) );