将一串十六进制存储到char中?

时间:2012-12-01 22:40:56

标签: c++ ascii cout

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

string a = "0x4D";

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

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

是否可以将" 0x4D" 存储到char中,以便打印出其ascii符号?如果有人有任何提示,那将不胜感激!如果有更好的方法,请告诉我!谢谢!

4 个答案:

答案 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]"