C ++将十六进制字符串表示形式转换为十六进制

时间:2019-12-12 14:43:08

标签: c++ hex

我在这里搜索了答案,但找不到答案或不理解。

我需要将std :: string(例如“ F1F2F3F4”)(8个字节)转换为字节\ xF1 \ xF2 \ xF3 \ xF4(4个字节)。

思考我需要std::hex,但是我对看到的例子感到困惑。转换后,我需要访问这些字节(作为char数组),以便可以将它们从EBCDIC转换为ASCII(但这是另一回事了)。

所以我认为应该是这样的:

somevariable << std::hex << InputString;

但是我应该使用什么作为变量?顺便说一下,InputString的长度可以在1到50左右之间。

我的编译器在Linux上是g ++ 4.8。

1 个答案:

答案 0 :(得分:4)

一种简单(但有点天真)的方法是一次从输入字符串中获取两个字符,然后放入另一个字符串,然后将该字符串传递给std::stoi(如果不这样做则传递给std::strtoul std::stoi)转换为整数,然后可以将其放入字节数组。

例如这样的东西:

std::vector<uint8_t> bytes;  // The output "array" of bytes
std::string input = "f1f2f4f4";  // The input string

for (size_t i = 0; i < input.length(); i += 2)  // +2 because we get two characters at a time
{
    std::string byte_string(&input[i], 2);  // Construct temporary string for
                                            // the next two character from the input

    int byte_value = std::stoi(byte_string, nullptr, 16);  // Base 16
    bytes.push_back(byte_value);  // Add to the byte "array"
}