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

C++ 如何从十六进制设置字符串值?,c++,hex,C++,Hex,例如,文本“召唤书”的十六进制值是“426F6F6B206F662053756D6D6F6E696E67” 因此,我希望能够将变量设置为string a=“book of summing”; 但是使用十六进制值 有这样或类似的输入。 标准:字符串hex=“42 6F 6F 6B 20 6F 66 20 53 75 6D 6D 6F 6E 69 6E 67” 我想用它设置一个字符串变量,使字符串看起来像“召唤书” 就像我在调试模式下查看这个变量一样,字符串的每个字符都有一个间隔的十六进制值。当然,

例如,文本“召唤书”的十六进制值是“426F6F6B206F662053756D6D6F6E696E67” 因此,我希望能够将变量设置为string a=“book of summing”; 但是使用十六进制值

有这样或类似的输入。 标准:字符串hex=“42 6F 6F 6B 20 6F 66 20 53 75 6D 6D 6F 6E 69 6E 67”

我想用它设置一个字符串变量,使字符串看起来像“召唤书”

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

如果我只是一个新的角色,我可以建立这样一个功能

或者,如果你能用十进制代替十六进制,我也能用,因为我会做一个函数,把十六进制转换成十进制

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

算法:

  • 开始遍历输入字符串
  • 将当前字符追加到临时字符串中
  • 在每个空间,您可以:
    • 使用base 16,通过
      strtol
      (或类似方式-可指定基数)将临时字符串转换为临时数字
    • 将临时字符串重置为空
    • 获取临时数字的ASCII字符
    • 将其附加到最后一个字符串
只要输入字符串中有字符,就继续操作。

算法:

  • 开始遍历输入字符串
  • 将当前字符追加到临时字符串中
  • 在每个空间,您可以:
    • 使用base 16,通过
      strtol
      (或类似方式-可指定基数)将临时字符串转换为临时数字
    • 将临时字符串重置为空
    • 获取临时数字的ASCII字符
    • 将其附加到最后一个字符串
只要输入字符串中有字符,就继续操作。

如下所示:

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
std::string hex=“42 6F 6F 6B 20 6F 66 20 53 75 6D 6D 6F 6E 69 6E 67”;
标准:istringstream iss(十六进制);
int i;
while(iss>>std::hex>>i)
std::cout像这样:

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
std::string hex=“42 6F 6F 6B 20 6F 66 20 53 75 6D 6D 6F 6E 69 6E 67”;
标准:istringstream iss(十六进制);
int i;
while(iss>>std::hex>>i)
std::cout
#包括
#包括
#包括
#包括
#包括
#包括
int main()
{
标准:字符串hex=“42 6F 6F 6B 20 6F 66 20 53 75 6D 6D 6F 6E 69 6E 67”;
std::istringstream为(十六进制);
is>>std::hex;
std::copy(std::istream_迭代器(is),std::istream_迭代器(),
std::ostream_迭代器(std::cout));
std::cout
#包括
#包括
#包括
#包括
#包括
#包括
int main()
{
标准:字符串hex=“42 6F 6F 6B 20 6F 66 20 53 75 6D 6D 6F 6E 69 6E 67”;
std::istringstream为(十六进制);
is>>std::hex;
std::copy(std::istream_迭代器(is),std::istream_迭代器(),
std::ostream_迭代器(std::cout));

std::你能解释一下什么是“召唤书”以及你到底想要什么吗?其次,你需要表现出一些努力。(让我们看看你已经尝试了什么。)@olevegard字符串中的每一部分似乎都是ASCII码,需要转换成所需的句子。@juanchopanza啊……当然了。对我来说可能有点太早了。你应该解释什么是“召唤书”以及你到底想要什么。其次,你需要付出一些努力。(向我们展示你已经尝试过的东西。)@olevegard字符串中的每个部分似乎都是一个ASCII码,需要转换成所需的句子。@juanchopanza啊……当然。对我来说,早上可能有点太早了。这只是输出字符串十六进制,而没有spaces@user1397417否,再次检查:)以清除
iss>>std::hex>>i
步骤这将删除流中的空白,这是一个格式化的流操作。它只输出字符串十六进制而不输出spaces@user1397417否,再次检查:)要清除
iss>>std::hex>>i
步骤是删除流中空白的步骤,这是一个格式化流操作。