c ++十六进制字符串到字节的转换

时间:2015-07-21 07:41:38

标签: c++ type-conversion

我有一个获取连续字节字符串的方法,我需要一个字节数组:

void  GetByteArray(string paddedResistance)
{
   unsigned char cmd[4]={0x00,0x00,0x00,0x00};


   list<string> resistanceBytesAsString;


   for (int i = 0; i < paddedResistance.size(); i+=2)
   {
       resistanceBytesAsString.push_back(paddedResistance.substr(i, 2));

   }
}

这是输入值:“00000100”

我将拆分它并将其作为四个单独的字符串添加到列表中:

00 00 01 00

我需要转换它们中的每一个,以便能够填充cmd unsigned char数组,但我无法弄清楚如何做到这一点。

在C#中我会使用

Convert.ToByte(myString, 16);

填充字节数组。

1 个答案:

答案 0 :(得分:1)

考虑使用这样的东西:

std::vector<std::string> resistanceBytesAsString{"00","01","10","11"};

std::vector<unsigned char> bytes(resistanceBytesAsString.size());
std::transform(
    resistanceBytesAsString.begin(), 
    resistanceBytesAsString.end(),
    bytes.begin(),
    [](const std::string& str) {
        // Convert the string of length 2 to byte.
        // You could also use a stringstream with hex option.
        unsigned char byte = (str[0] - '0') << 1 | (str[1] - '0');
        return byte;
});

Live working example