我有一个很大的hexidemical(在std :: string表示中)我需要解析为二进制表示(可能是unsigned char *)以与OpenSSL的sha256函数一起使用,以便创建一个哈希。在二进制表示中,我不是指二进制字符串,而是实际的二进制数据。我正在努力寻找一个很好的解决方案来进行这种转换,并希望有人可以提供帮助。
这种C风格的一个例子在这里提供了hex2bin函数(由于版权声明的链接)http://pastebin.com/bW3fQA2a
修改
澄清一下,是的,十六进制字符串将长于long(和long longs)。
答案 0 :(得分:1)
这个怎么样:
void readStr(const std::string& str, unsigned char* output) {
for (size_t s = 0; s < str.size() ; s+= 2){
std::string twoChars = str.substr(s,2); // Read two chars
unsigned char c = (unsigned char)std::stoi( twoChars,0,16); // Transform them to a 1-byte int
*output = c; // Write byte into buffer and advance
c++;
}
}
这允许将任意长度的字符串转换为字节数组。它的工作原理是一次只挑选两个十六进制数字(一个字节),使用stoi
转换它并将其写入输出缓冲区。