将十六进制字符串转换为字节数组
要将像“01A1”这样的可变长度十六进制字符串转换为字节数组,有您可以考虑以下几种方法:
使用向量字符
以下代码片段演示了如何使用字符向量来存储转换后的字节数组:
std::vector<char> HexToBytes(const std::string& hex) { std::vector<char> bytes; for (unsigned int i = 0; i < hex.length(); i += 2) { std::string byteString = hex.substr(i, 2); char byte = (char) strtol(byteString.c_str(), NULL, 16); bytes.push_back(byte); } return bytes; }
此函数采用十六进制字符串作为输入并迭代其成对的字符。使用 strtol 函数将每对字符转换为单个字节,该函数将十六进制字符串解释为十六进制表示形式并返回等效的十进制值。然后将生成的字节附加到向量中。
使用字符数组
或者,您可以将字节数组存储在字符数组中:
char* HexToBytes(const std::string& hex, int& length) { length = hex.length() / 2; char* bytes = new char[length]; for (unsigned int i = 0; i < hex.length(); i += 2) { std::string byteString = hex.substr(i, 2); bytes[i / 2] = (char) strtol(byteString.c_str(), NULL, 16); } return bytes; }
在这种情况下,该函数采用十六进制字符串和一个整数引用,该引用将存储字节数组的结果长度。它为字节数组动态分配内存,并以与基于向量的解决方案类似的方式填充它。
这两种方法都会生成一个字节数组,该数组可以写入文件并正确解释为所表示的二进制数据由原始的十六进制字符串。
以上是如何在 C 中将十六进制字符串转换为字节数组?的详细内容。更多信息请关注PHP中文网其他相关文章!