шестнадцатеричный символ в десятичном виде и сохранить вывод как символ

0

Я пишу функцию преобразования hex-dec. Ввод - это один символ, который преобразуется в шестнадцатеричный и возвращается как символ. Вот функция

char hex2dec(char inp)
{
    char out;
    cout << "inp:" << inp;

    if(inp >= '0' && inp <='9')
    {
        out = (inp - '0');
        cout << " out " << out;
    }
    else 
    {
        out = (toupper(inp) - 'A' + 10);
        cout << " out " << out;
    }

    return out;
}

Когда я передаю функцию "0" и "А", то печать, которую я получаю, является inp: 0 out inp: A out, т.е. ничего не распечатывается.

Я не могу найти проблему. Может ли кто-нибудь помочь?

  • 1
    Ваше описание не имеет смысла. Если это преобразователь из шестнадцатеричного в десятичное, то почему входной символ «конвертируется в шестнадцатеричный»? Он должен быть уже шестнадцатеричным. Кроме того, это не преобразование «в декабрь», это преобразование в число.
  • 1
    Вы знаете, как использовать библиотеку iostream ? Все, что вам нужно, уже есть. Кстати, что вы собираетесь делать с этим после конвертации? Распечатать это как шестнадцатеричное значение?
Показать ещё 9 комментариев
Теги:
hex
decimal

4 ответа

2

То, что вы на самом деле пытаетесь напечатать, это символы ascii с кодами [0-15], которые не являются печатаемыми символами, т.е. вы хотите распечатать 15, но вы печатаете "\ x0f" и т.д.

использовать:

cout << (int);

и вы заставите cout вызывать метод печати ints not chars - это решит вашу проблему.

..или больше 'c++++ ish' ;-)

cout << static_cast (out);

.. или это для большинства выглядит странно:

cout << int (out);

  • 0
    Я понимаю , что это предпочтение вещь, но я думаю , что cout << int(out) (или просто сделать out в int для начала, несколько чище. С помощью кнопок C бросает в C, но использовать C ++ объектов при написании C ++ ...
0

причина, по которой u получил "A" от печати, - это char, а после "A" - "A" + 10 - символ, значение ascii которого равно 10 вместо целого 10. Таким образом, u получит символ, Значение ascii равно 10 вместо получения "A". После проверки таблицы ascii этот символ равен NULL, что может объяснить, почему у вас ничего не получается.

0

Для этого просто используйте std::stringstream.

#include <iostream>
#include <sstream>

int main (int argc, char ** argv)
{
  // use hex formatting
  std::stringstream stream;
  stream << std::hex << 'A';

  // retrieve value of the hex input character
  int value;
  stream >> value;
  std::cout << value << std::endl; // prints 10

  // reset the stream
  stream.str ();
  stream.clear();

  // also works for strings
  stream << "0xABC" << std::endl;
  stream >> value;
  std::cout << value << std::endl; // prints 2748

  return 0;
}
  • 0
    Пользователь начинает с шестнадцатеричного символа, а не целого числа.
  • 0
    @MarkTolonen: должно быть исправлено сейчас. В некотором роде искаженные намерения ОП там.
0

Используйте int out вместо char out. cout печатает char как char а не целое число. Значения ASCII 0-15 являются непечатаемыми управляющими символами.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню