我有一个字符串说:
string abc = "1023456789ABCD"
我想将它转换成一个字节数组,如:
byte[0] = 0x10;
byte[1] = 0x23;
byte[2] = 0x45;
----
等等
我在这里查看了一些帖子,但找不到合适的解决方案。任何帮助将不胜感激。提前致谢。
我有一个字符串说:
string abc = "1023456789ABCD"
我想将它转换成一个字节数组,如:
byte[0] = 0x10;
byte[1] = 0x23;
byte[2] = 0x45;
----
等等
我在这里查看了一些帖子,但找不到合适的解决方案。任何帮助将不胜感激。提前致谢。
在 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
当您说“字节”时,您的意思是每个字符都以十六进制表示。
在这种情况下,您可以简单地使用string.c_str()
,因为这只是一个 c 风格的字符串 ( char*
)。
byte[2] = 0x45
是相同的
byte[2] = 69; //this is 0x45 in decimal
如果要单独存储数组,可以将输出分配string.c_str()
给另一个。char*