Ответ 1
также, iostreams может быть болью с их "манипуляторами". Чтобы сделать что-нибудь интересное для чтения человеком, вы можете посмотреть в формате boost:: format, который приносит все радости printf в мир типичного вывода.
Я c coder, новый для С++.
Я пытаюсь напечатать следующее с помощью cout со странным выходом. Любые комментарии к этому поведению оцениваются.
#include<iostream>
using namespace std;
int main()
{
unsigned char x = 0xff;
cout << "Value of x " << hex<<x<<" hexadecimal"<<endl;
printf(" Value of x %x by printf", x);
}
выход:
Value of x ÿ hexadecimal
Value of x ff by printf
также, iostreams может быть болью с их "манипуляторами". Чтобы сделать что-нибудь интересное для чтения человеком, вы можете посмотреть в формате boost:: format, который приносит все радости printf в мир типичного вывода.
<<
обрабатывает char
как символ, который вы хотите вывести, и просто выводит этот байт точно. hex
применяется только к целочисленным типам, поэтому следующее будет делать то, что вы ожидаете:
cout << "Value of x " << hex << int(x) << " hexadecimal" << endl;
Предложение Billy ONeal static_cast
будет выглядеть так:
cout << "Value of x " << hex << static_cast<int>(x) << " hexadecimal" << endl;
Вы правильно выполняете шестнадцатеричную часть, но x - символ, а С++ пытается напечатать ее как символ. Вы должны отдать его целому числу.
#include<iostream>
using namespace std;
int main()
{
unsigned char x = 0xff;
cout << "Value of x " << hex<<static_cast<int>(x)<<" hexadecimal"<<endl;
printf(" Value of x %x by printf", x);
}
Если я правильно понял ваш вопрос, вы должны знать, как преобразовать hex
в dec
, поскольку вы уже назначили unsigned char x = 0xff;
#include <iostream>
int main()
{
unsigned char x = 0xff;
std::cout << std::dec << static_cast<int>(x) << std::endl;
}
который должен присвоить значение 255
.
Дополнительная информация, относящаяся к потоку str
к dec
, относится к http://www.cplusplus.com/reference/ios/dec/.
Если вы хотите узнать шестнадцатеричное значение из десятичного числа, вот простой пример
#include <iostream>
#include <iomanip>
int main()
{
int x = 255;
std::cout << std::showbase << std::setw(4) << std::hex << x << std::endl;
}
который печатает oxff
.
Библиотека <iomanip>
является необязательной, если вы хотите видеть 0x
перед ff
. Первоначальный ответ, связанный с печатью hex
, был в http://www.cplusplus.com/forum/windows/51591/.