所以我有一个字符串,其中有一个十六进制值。例如,我的字符串可能有
string a = "0x4D";
是否可以将0x4D分配给char?因为我知道如果我有
char c = 0x4D
然后我可以打印出它的 ASCII 符号,即M。
是否可以将“0x4D”存储到一个字符中,以便我可以打印出它的 ascii 符号?如果有人有任何提示,将不胜感激!如果有更好的方法可以做到这一点,请告诉我!谢谢!
您可以使用strtol
将字符串转换为数字。然后,您可以打印此号码或用它做其他您喜欢的事情。
哦,等等,你给它贴上了 C++ 的标签,而且strtol
是非常 C 风格的。在 C++ 中,您可以使用字符串流,并从中提取一个数字。
您可以使用std::stoi
将字符串转换为整数(从0x
前缀自动检测基数):
std::string str = "0x4D";
char c = static_cast<char>(std::stoi(str));
std::cout << c << std::endl;
但是,这不能保证为您提供该值的 ASCII 字符。仅在这个简单的代码中就出现了字符集之间的各种转换。例如,char
字符串文字中的 s使用实现定义的执行字符集中"0x4D"
的相应值进行初始化。打印的字符也取决于显示它的媒体的解释。
您能做的最好的事情是提供从 ASCII 值到字符的映射。您可以使用索引为 ASCII 值且元素为相应字符的数组来执行此操作。
这是一个基于以下的解决方案std::stringstream
:
std::istringstream iss ("0x4D");
iss.flags(std::ios::hex);
int i;
iss >> i;
std::cout << "[" << (char)i << "]" << std::endl; //--> prints "[M]"
按照 Bas 的建议使用字符串流:
int x;
string s = "0x10";
stringstream ss;
ss << hex << s;
ss >> x;
但我认为这是一种浪费的方式。