如何从十六进制设置字符串值
How can I set a strings value from hex?
例如,文本"召唤书"的十六进制值为"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字符
- 将其附加到最后一个字符串中
- 使用基数16通过
只要输入字符串中有字符,就继续。
相关文章:
- C++ 命名参数习惯用语 - 未设置字符串属性
- 如何将字符串属性设置为 QTreeWidgetItem?
- 我如何处理有关输入的字符串大小超过字符数组设置大小的错误?
- C++如何将字符串数组中的一个点设置为枚举变量
- 从C++为字符串函数设置_ENV
- 在给定字符串上使用 tolower() 和 isalpha() 并将其输出设置为另一个字符串
- 通过比较字符设置字符串时出现问题
- 如何在 c++ 中从字符串向量设置类对象
- STD ::设置带有字符串键和潜在效率损失
- 如何调用 GetAltMonthNames 来填充外部区域设置月份字符串的安全数组
- 设置可变值通过字符串引用它
- 仅使用 getName 在主函数中设置字符串名称
- 如何将变量名设置为字符串?C++
- 在类中设置Arduino字符串值
- 如何在C++中有条件地设置 C 样式字符串?
- 在字符串列表中查找字符串,然后将字符串设置为找到的字符串?
- 从函数参数常量字符串 (&) 设置值
- 在定义过程中将std::string设置为0与将std::字符串设置为0相比
- 将字符串设置为日期格式
- 如何将包含空格的字符串设置为HTML文本字段(在表单中)的默认值