我有一个C ++脚本,它涉及可能是十六进制数字的字符串表示。在脚本的后面部分,我想将这些可能的十六进制数转换为基数为10的双精度数。为了尝试进行这种转换,我使用了一个函数。
double MyFunction(string input)
{
double Number;
stringstream ss(input);
ss >> hex >> Number;
return Number;
}
当我的脚本运行时,似乎结果转换的字符串仅被视为十进制数字。如果原始字符串是“fc”或“b5”,则表示转换后的数字为-9.25596e + 061。但如果字符串是“33”(应该是0x33),它会将其视为十进制33.我尝试了没有“>>十六进制”并在转换前向字符串添加“0x”前缀(因为编译似乎就像16那样理解0xF),但没有这样的运气。
我理解计算机将所有内容存储为二进制文件,并且未查看查看数字的基础,但我根本不明白这里有什么问题。为什么它似乎坚持阅读基数10中的字符串并忽略A-F的任何实例?
任何帮助将不胜感激。
答案 0 :(得分:4)
十六进制操纵器仅适用于整数类型,如int。首先将十六进制字符串输入一个整数,然后将其转换为double:
double MyFunction(string input)
{
int Number; // Notice now Number is an integer
stringstream ss(input);
ss >> hex >> Number;
return Number; // This should convert Number to a double via promotion
}