【问题标题】:Hex value in string conversion字符串转换中的十六进制值
【发布时间】: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


    【解决方案1】:

    十六进制操作符仅适用于整数类型,如 int。首先将十六进制字符串输入为整数,然后将其转换为双精度:

    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
    }
    

    【讨论】:

      猜你喜欢
      • 2018-01-22
      • 2019-07-27
      • 2012-02-03
      • 2015-07-23
      • 2018-01-31
      • 2020-03-14
      • 2020-06-20
      • 2017-03-11
      • 1970-01-01
      相关资源
      最近更新 更多