首页 > 后端开发 > C++ > 如何在 C 中将十六进制字符串转换为字节数组?

如何在 C 中将十六进制字符串转换为字节数组?

Patricia Arquette
发布: 2025-01-01 01:22:16
原创
643 人浏览过

How Can I Convert a Hex String to a Byte Array in C  ?

将十六进制字符串转换为字节数组

要将像“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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板