【发布时间】:2011-11-12 15:52:22
【问题描述】:
我有一个 C++ 脚本,其中涉及可能是十六进制数字的字符串表示。在脚本的后面部分,我想将这些可能的十六进制数转换为双精度数,以进行一些以 10 为底的算术运算。为了尝试进行这种转换,我使用了一个函数。
double MyFunction(string input)
{
double Number;
stringstream ss(input);
ss >> hex >> Number;
return Number;
}
当我的脚本运行时,结果转换后的字符串似乎只被视为十进制数。如果原始字符串是“fc”或“b5”,则表示转换后的数字是-9.25596e+061。但是,如果字符串是“33”(应该是 0x33),它会将其视为十进制 33。我已经尝试过不使用“>> hex”并在转换前为字符串添加“0x”前缀(因为编译似乎像 16 一样理解 0xF),但没有这样的运气。
我了解计算机将所有内容都存储为二进制,并且未存储查看数字的基数,但我只是不明白这里出了什么问题。为什么它似乎坚持读取以 10 为底的字符串而忽略 A-F 的任何实例?
任何帮助将不胜感激。
【问题讨论】:
标签: c++ hex decimal stringstream