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

标签 c++ hex decimal stringstream

我有一个 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/

相关文章:

c++ - while(--i); 之间有什么区别?而 while(i) --i;?

c++ - 我可以在 Windows Phone 7 中使用 C++ 吗?

javascript - Java十六进制计算

c++ - 从文件中取出两个十六进制字符并存储为具有相关十六进制值的字符

javascript - 限制javascript中小数点后显示的数字数量

c++ - 在 c++ w/directx 中测试正方形是否与多边形重叠(可选)

c++ - 测试指针是否为空的最有效方法是什么?

c# - 使用 IO 在 C# 中读取十六进制

c# - 如何将 C# 中分隔的美元和美分的十进制值转换为字符串值?

舍入数字并强制 R 显示 0