将十六进制字符串解析为二进制char的最佳方法

时间:2014-06-30 14:20:47

标签: c++ hex

我有一个很大的hexidemical(在std :: string表示中)我需要解析为二进制表示(可能是unsigned char *)以与OpenSSL的sha256函数一起使用,以便创建一个哈希。在二进制表示中,我不是指二进制字符串,而是实际的二进制数据。我正在努力寻找一个很好的解决方案来进行这种转换,并希望有人可以提供帮助。

这种C风格的一个例子在这里提供了hex2bin函数(由于版权声明的链接)http://pastebin.com/bW3fQA2a

修改

澄清一下,是的,十六进制字符串将长于long(和long longs)。

1 个答案:

答案 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转换它并将其写入输出缓冲区。