Формат С++ cout hex

Я 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

Ответы

Ответ 1

также, iostreams может быть болью с их "манипуляторами". Чтобы сделать что-нибудь интересное для чтения человеком, вы можете посмотреть в формате boost:: format, который приносит все радости printf в мир типичного вывода.

Ответ 2

<< обрабатывает 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;

Ответ 3

Вы правильно выполняете шестнадцатеричную часть, но 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);
}

Ответ 4

Если я правильно понял ваш вопрос, вы должны знать, как преобразовать 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/.