Как я могу правильно конвертировать это в гекс?

У меня есть проблема, когда я пытаюсь преобразовать числа в шестнадцатеричные с помощью следующего кода.

int numconvert(string hexnum)
{
stringstream converter(hexnum);
unsigned int value = 0;
converter >> hex >> value;
return value;
}

string hexconvert(int hexnum)
{
stringstream ss;
ss << hex << hexnum;

string n;
ss >> n;
return n;
}

Я использую numconvert, чтобы изменить ввод с строки на int, затем я использую hexconvert, чтобы изменить это в hex и сохранить его как строку.

Кажется, что все работает просто отлично, но почему-то, когда я передаю его 4096, он возвращает мне 4096. Я ожидал 1000, но я не уверен, почему это из-за меня. Я даю ему 4096, и я замечаю, что он возвращает int 16534, затем программа отправляет его в hexconvert и возвращает 4096, что технически правильно, но не то, что я хотел.

Кажется, он отлично справляется с другими числами. Что я здесь не так делаю?

-3

Решение

Я думаю, что у вас есть логическая ошибка там. Если вы напишите:

int n = numconvert("4096");
std::string s = hexconvert(n);

Вы в основном говорите, что интерпретировать «4096» уже как шестнадцатеричное число, потому что вы получили converter >> hex >> value; внутри numconvertперевод его обратно в hex всегда приведет к тому же возвращению.

То, что вы хотите, это, вероятно,

int n = std::stoi("4096");
std::string s = hexconvert(n);

Это будет интерпретировать «4096» как обычное число 10, а затем снова преобразовать его в шестнадцатеричную строку, используя ваш hexconvert,


Это сказал ваш numconvert может быть написан короче и, возможно, немного более эффективно, используя СТД :: стои тоже в основном просто:

int numconvert(const std::string& str)
{
return std::stoi(str, nullptr, 16);
}

нам не нужен второй аргумент, поэтому мы передаем nullptr3-й аргумент является основанием.

2

Другие решения

Попробуйте использовать str член вместо оператора извлечения, чтобы извлечь строку из потока строк. Помимо того, что вы более прямолинейны, вам не нужно беспокоиться о том, как экстрактор будет дальше интерпретировать вещи.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector