将一串十六进制存储到字符中

Store a string of hex into a char?

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

所以我有一个包含十六进制值的字符串。例如,我的字符串可能有

string a = "0x4D";

是否可以将0x4D分配给字符?因为我知道,如果我有

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 字符。仅在此简单代码中,字符集之间就发生了各种转换。例如,字符串文本"0x4D"中的char s使用实现定义的执行字符集中的相应值进行初始化。印刷字符也取决于显示它的媒体的解释。

您能做的最好的事情就是提供从 ASCII 值到字符的映射。您可以使用一个数组来执行此操作,其中索引是 ASCII 值,元素是相应的字符。

按照 Bas 的建议使用字符串流:

int x;
string s = "0x10";
stringstream ss;
ss << hex << s;
ss >> x;

但我认为这是一种浪费的方式。

这是一个基于 std::stringstream 的解决方案:

std::istringstream iss ("0x4D");
iss.flags(std::ios::hex);
int i;
iss >> i;
std::cout << "[" << (char)i << "]" << std::endl;   //--> prints "[M]"