字符串转换中的十六进制值

时间:2011-09-08 03:45:19

标签: c++ hex decimal stringstream

我有一个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的任何实例?

任何帮助将不胜感激。

1 个答案:

答案 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
}