1

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

string a = "0x4D";

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

char c = 0x4D 然后我可以打印出它的 ASCII 符号,即M

是否可以将“0x4D”存储到一个字符中,以便我可以打印出它的 ascii 符号?如果有人有任何提示,将不胜感激!如果有更好的方法可以做到这一点,请告诉我!谢谢!

4

4 回答 4

2

您可以使用strtol将字符串转换为数字。然后,您可以打印此号码或用它做其他您喜欢的事情。

哦,等等,你给它贴上了 C++ 的标签,而且strtol是非常 C 风格的。在 C++ 中,您可以使用字符串流,并从中提取一个数字。

于 2012-12-01T22:45:23.740 回答
2

您可以使用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 值且元素为相应字符的数组来执行此操作。

于 2012-12-01T22:48:58.337 回答
0

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

std::istringstream iss ("0x4D");
iss.flags(std::ios::hex);
int i;
iss >> i;

std::cout << "[" << (char)i << "]" << std::endl;   //--> prints "[M]"
于 2012-12-01T22:56:18.000 回答
0

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

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

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

于 2012-12-01T22:54:58.603 回答