Печать беззнакового символа (BYTE) в шестнадцатеричном формате на c ++. Использование std :: cout - PullRequest
0 голосов
/ 15 января 2020

Я просмотрел все предыдущие версии этого топи c, и, похоже, ни одна из них не помогла. У меня есть значение, расположенное в неподписанном символе, называемое Offset. При печати с printf("%02X\n", Offset); выводится правильное значение 0x2B. Хотя, когда я пытаюсь с std::cout << std::hex << Offset << std::endl;, он всегда печатает другое значение. Я также попытался:

std::cout << std::hex << (unsigned int)Offset << std::endl;
std::cout << std::hex << static_cast<unsigned>(Offset) << std::endl;

Хотя, похоже, никто не печатал правильное значение.

1 Ответ

0 голосов
/ 15 января 2020

Поскольку вы определили «Смещение», как это unsigned char Offset = 0x2B;, тип смещения теперь равен unsigned char, и вы не можете печатать переменную unsigned char как std::hex. Сначала необходимо преобразовать его в тип std::hex, а затем распечатать.

#include <iostream >


int main() {

    unsigned char Offset = 0x2B;
    printf("%02X\n", Offset);
    std::cout << std::hex << Offset << std::endl;
    std::cout << std::hex << (unsigned int)Offset << std::endl;
    std::cout << std::hex << static_cast<unsigned>(Offset) << std::endl;
    return 0;
}
...