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