我有一个 C++ 脚本,它涉及可能的十六进制数的字符串表示形式。在脚本的后面部分,我想将这些可能的十六进制数转换为 double 以进行以 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”前缀(因为编译似乎理解 0xF 就像它理解 16) 一样,但没有这样的运气。
我知道计算机将所有内容都存储为二进制,并且不存储查看数字的基数,但我只是不明白这里有什么问题。为什么它似乎坚持以 10 为基数读取字符串并忽略 A-F 的任何实例?
我们将不胜感激。
最佳答案
十六进制操纵器仅适用于整数类型,如 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
}
关于c++ - 字符串转换中的十六进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7342889/