Я пишу функцию преобразования 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, т.е. ничего не распечатывается.
Я не могу найти проблему. Может ли кто-нибудь помочь?
То, что вы на самом деле пытаетесь напечатать, это символы ascii с кодами [0-15], которые не являются печатаемыми символами, т.е. вы хотите распечатать 15, но вы печатаете "\ x0f" и т.д.
использовать:
cout << (int);
и вы заставите cout вызывать метод печати ints not chars - это решит вашу проблему.
..или больше 'c++++ ish' ;-)
cout << static_cast (out);
.. или это для большинства выглядит странно:
cout << int (out);
cout << int(out)
(или просто сделать out
в int
для начала, несколько чище. С помощью кнопок C бросает в C, но использовать C ++ объектов при написании C ++ ...
причина, по которой u получил "A" от печати, - это char, а после "A" - "A" + 10 - символ, значение ascii которого равно 10 вместо целого 10. Таким образом, u получит символ, Значение ascii равно 10 вместо получения "A". После проверки таблицы ascii этот символ равен NULL, что может объяснить, почему у вас ничего не получается.
Для этого просто используйте 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;
}
Используйте int out
вместо char out
. cout
печатает char
как char
а не целое число. Значения ASCII 0-15 являются непечатаемыми управляющими символами.
iostream
? Все, что вам нужно, уже есть. Кстати, что вы собираетесь делать с этим после конвертации? Распечатать это как шестнадцатеричное значение?