1

我有一个字符串说:

string abc = "1023456789ABCD"

我想将它转换成一个字节数组,如:

byte[0] = 0x10;
byte[1] = 0x23;
byte[2] = 0x45; 
----

等等

我在这里查看了一些帖子,但找不到合适的解决方案。任何帮助将不胜感激。提前致谢。

4

2 回答 2

3

在 Coliru 上看到它

#include <string>
#include <cassert>

template <typename Out>
void hex2bin(std::string const& s, Out out) {
    assert(s.length() % 2 == 0);

    std::string extract;
    for (std::string::const_iterator pos = s.begin(); pos<s.end(); pos += 2)
    {
        extract.assign(pos, pos+2);
        *out++ = std::stoi(extract, nullptr, 16);
    }
}

#include <iostream>
#include <vector>

int main()
{
    std::vector<unsigned char> v;

    hex2bin("1023456789ABCD", back_inserter(v));

    for (auto byte : v)
        std::cout << std::hex << (int) byte << "\n";
}

输出

10
23
45
67
89
ab
cd
于 2013-10-15T08:49:44.127 回答
-1

当您说“字节”时,您的意思是每个字符都以十六进制表示。

在这种情况下,您可以简单地使用string.c_str(),因为这只是一个 c 风格的字符串 ( char*)。

byte[2] = 0x45

是相同的

byte[2] = 69; //this is 0x45 in decimal

如果要单独存储数组,可以将输出分配string.c_str()给另一个。char*

于 2013-10-15T08:50:03.310 回答