【问题标题】:Hex String to char* array C++ [duplicate]十六进制字符串到char *数组C ++ [重复]
【发布时间】:2015-04-14 14:19:25
【问题描述】:

我使用此代码将 char* 转换为十六进制字符串

char const hex[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B','C','D','E','F' };

      std::string hex_str;
      for (int i = 0; i < byte_received; ++i)
      {
        const char ch = data[i];
        hex_str.append(&hex[(ch  & 0xF0) >> 4], 1);
        hex_str.append(&hex[ch & 0xF], 1);
      }

如何将十六进制字符串反向转换为原始数据?

【问题讨论】:

  • 什么是data?如果您有 char* 并且想要将其转换为 string,则可以使用现有的 string 构造函数。
  • 数据是一个无符号字符数组*
  • 在上面的代码中,我将无符号字符*转换为十六进制值字符串,我想将我的十六进制字符串重新转换为无符号字符*

标签: c++ string hex


【解决方案1】:

我认为这将为您提供十六进制字符串输入的字符数组输出。

#include <iostream>
#include <algorithm>

using namespace std;


char* hextostr(const std::string& hexStr)
{
    const char* const hex = "0123456789ABCDEF";
    size_t len = hexStr.length();
    int k=0;
    if (len & 1) return NULL;

    char* output = new char[(len/2)+1];
    for (size_t i = 0; i < len; i += 2)
    {
        char a,b;

        a = hexStr[i];
        const char* p = std::lower_bound(hex, hex + 16, a);
        if (*p != a) return NULL;

        b = hexStr[i + 1];
        const char* q = std::lower_bound(hex, hex + 16, b);
        if (*q != b) return NULL;

        output[k++] = ((p - hex) << 4) | (q - hex);
    }
    output[k] = '\0';
    return output;
}

或者你也可以这样做

char* hextostr(const std::string& hexStr)
{
    size_t len = hexStr.length();
    int k=0;
    if (len & 1) return NULL;

    char* output = new char[(len/2)+1];
    for (size_t i = 0; i < len; i+=2)
    {
        output[k++] = (((hexStr[i] >= 'A')? (hexStr[i] - 'A' + 10): (hexStr[i] - '0')) << 4) |
                      (((hexStr[i+1] >= 'A')? (hexStr[i+1] - 'A' + 10): (hexStr[i+1] - '0')));
    }
    output[k] = '\0';
    return output;
}

【讨论】:

    猜你喜欢
    • 2015-05-22
    • 2015-05-22
    • 2018-04-22
    • 2013-11-30
    • 2015-03-09
    • 2014-12-12
    • 2017-02-19
    • 2019-08-10
    • 2012-05-30
    相关资源
    最近更新 更多