#include <string>
#include <algorithm>
#include <vector>
#include <iostream>
#include <iterator>
#include <iomanip>
inline int char2hex(char c)
{
if (c >= '0' && c <= '9') return c - '0';
if (c >= 'a' && c <= 'f') return c - 'a' + 10;
if (c >= 'A' && c <= 'F') return c - 'A' + 10;
}
std::vector<unsigned char> str2hex(const std::string& hexStr)
{
std::vector<unsigned char> retVal;
bool highPart = ((hexStr.length() % 2) == 0);
if (!highPart)
retVal.push_back(0);
std::for_each(hexStr.begin(), hexStr.end(),
[&](char nextChar) {
if (highPart)
retVal.push_back(0x10 * char2hex(nextChar));
else
retVal.back() += char2hex(nextChar);
highPart = !highPart;
}
);
return retVal;
}
int main() {
std::string someHex = "c45a1bf";
std::vector<unsigned char> someUHex = str2hex(someHex);
std::copy(someUHex.begin(), someUHex.end(), std::ostream_iterator<int>(std::cout << std::hex, ""));
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDxpb21hbmlwPgoKaW5saW5lIGludCBjaGFyMmhleChjaGFyIGMpCnsKICAgaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKSByZXR1cm4gYyAtICcwJzsKICAgaWYgKGMgPj0gJ2EnICYmIGMgPD0gJ2YnKSByZXR1cm4gYyAtICdhJyArIDEwOwogICBpZiAoYyA+PSAnQScgJiYgYyA8PSAnRicpIHJldHVybiBjIC0gJ0EnICsgMTA7Cgp9CnN0ZDo6dmVjdG9yPHVuc2lnbmVkIGNoYXI+IHN0cjJoZXgoY29uc3Qgc3RkOjpzdHJpbmcmIGhleFN0cikKewogICAgIHN0ZDo6dmVjdG9yPHVuc2lnbmVkIGNoYXI+IHJldFZhbDsKICAgICBib29sIGhpZ2hQYXJ0ID0gKChoZXhTdHIubGVuZ3RoKCkgJSAyKSA9PSAwKTsgIAogICAgIGlmICghaGlnaFBhcnQpCiAgICAgICAgIHJldFZhbC5wdXNoX2JhY2soMCk7CiAgICAgc3RkOjpmb3JfZWFjaChoZXhTdHIuYmVnaW4oKSwgaGV4U3RyLmVuZCgpLCAKICAgICAgICBbJl0oY2hhciBuZXh0Q2hhcikgewogICAgICAgICAgIGlmIChoaWdoUGFydCkKCQlyZXRWYWwucHVzaF9iYWNrKDB4MTAgKiBjaGFyMmhleChuZXh0Q2hhcikpOwogICAgICAgICAgIGVsc2UKCQlyZXRWYWwuYmFjaygpICs9IGNoYXIyaGV4KG5leHRDaGFyKTsKICAgICAgICAgICBoaWdoUGFydCA9ICFoaWdoUGFydDsKICAgICAgIH0KICAgICApOwoKICAgIHJldHVybiByZXRWYWw7Cn0KCmludCBtYWluKCkgewogIHN0ZDo6c3RyaW5nIHNvbWVIZXggPSAgImM0NWExYmYiOwogIHN0ZDo6dmVjdG9yPHVuc2lnbmVkIGNoYXI+IHNvbWVVSGV4ID0gc3RyMmhleChzb21lSGV4KTsKICBzdGQ6OmNvcHkoc29tZVVIZXguYmVnaW4oKSwgc29tZVVIZXguZW5kKCksIHN0ZDo6b3N0cmVhbV9pdGVyYXRvcjxpbnQ+KHN0ZDo6Y291dCA8PCBzdGQ6OmhleCwgIiIpKTsKfQ==