Шестнадцатеричное значение в преобразовании строки - PullRequest
0 голосов
/ 08 сентября 2011

У меня есть сценарий 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" к строке перед преобразованием (так какКомпиляция, кажется, понимает 0xF так же, как и 16), но не повезло.

Я понимаю, что компьютер хранит все как двоичное, и что база, в которой просматривается число, не сохраняется, но я просто непонять, что здесь не так.Почему он, по-видимому, настаивает на чтении строки в базе 10 и игнорировании любого экземпляра AF?

Любая помощь будет оценена.

1 Ответ

4 голосов
/ 08 сентября 2011

Шестнадцатеричный манипулятор работает только для целочисленных типов, таких как 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...