如何从十六进制设置字符串值

How can I set a strings value from hex?

本文关键字:字符串 设置 十六进制      更新时间:2023-10-16

例如,文本"召唤书"的十六进制值为"42 6F 6F 6B 20 6F 66 20 53 75 6D 6D 6F 6E 69 6E 67"所以我希望能够设置变量,就好像我把它设置成字符串a="book of summoing"一样;但是使用十六进制值。

有这样或类似的输入。std::string十六进制="42 6F 6F 6B 20 6F 66 20 53 75 6D 6D 6F 6E 69 6E 67";

我想用它设置一个字符串变量,这样字符串看起来就像"召唤之书";

就好像我在调试模式下查看这个变量一样,字符串的每个字符都有一个间隔的十六进制值。当然,印刷字符串会印刷"召唤之书"。

如果我只是知道如何用一个字符来实现它,我就可以构建这样一个函数。

或者,如果你可以使用十进制而不是十六进制,这对我也适用,因为我只需要制作一个从十六进制转换为十进制的函数

编辑:在调试模式中,我可以看到字符串hex[0]的第一个字符'B'旁边有一个66,我猜这是该字符的dec值。如果我知道如何获得该值或通过设置该值来设置字符串,我可以完成所有这些,但我不知道我是否可以做到。

像这样:

std::string hex = "42 6F 6F 6B 20 6F 66 20 53 75 6D 6D 6F 6E 69 6E 67";
std::istringstream iss(hex);
int i;
while (iss >> std::hex >> i)
std::cout << static_cast<char>(i);
// alternatively
// s += static_cast<char>(i); 
// where s is a std::string

这假设输入已经被净化,并且包含适合char的值。

现场演示

#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>
#include <iterator>
#include <algorithm>
int main()
{
std::string hex = "42 6F 6F 6B 20 6F 66 20 53 75 6D 6D 6F 6E 69 6E 67";
std::istringstream is( hex );
is >> std::hex;
std::copy( std::istream_iterator<int>( is ), std::istream_iterator<int>(),
std::ostream_iterator<char>( std::cout ) );
std::cout << std::endl;
}

编辑:我添加了遗漏的标题<sstream>

算法:

  • 开始遍历输入字符串
  • 在临时字符串中追加当前字符
  • 在每个空间,您:
    • 使用基数16通过strtol(或类似的方法,您可以在其中指定基数)将临时字符串转换为临时数字
    • 将临时字符串重置为空
    • 获取临时号码的ASCII字符
    • 将其附加到最后一个字符串中

只要输入字符串中有字符,就继续。