Вывод ASCII в шестнадцатеричной форме? - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь реализовать AES для школьного проекта. Моя цель - вывести зашифрованный текст на экран и в текстовый файл. Шифрование идет полностью, как ожидалось, и я могу убедиться в этом, посмотрев на это:

    for (int j = 0; j<object.words * 4; j++)
    {
        printf("%02x ", Encryptor.out[j]);
    }

Текст, который он зашифровывает, «я так рад, что это работает», с 128-битным ключом «собака», и этот цикл печатает первые 16 символов шифрования, который гласит:

c8 88 45 0d 5d 40 ff 5b a4 55 91 c9 c4 00 f5 a4

Я убедился, что это то, что AES должен печатать в этом контексте. Позже у меня есть следующие строки вывода:

this is Encryptor.out[0] in cout: ╚
This is Encryptor.out[0] in printf with the format code '%02x': c8
Press any key to continue . . .

Мой вызов cout, вероятно, просто нуждается в коде форматирования, поэтому меня это не беспокоит. Осложнение в этой точке:

ofstream OutFile("Encrypted.txt");
Outfile << Encryptor.out[0];

На данный момент, единственное, что содержится в Encrypted.txt, это один символ 'È'. Я знаю, что c8 в шестнадцатеричном формате - это 'È' в ASCII, но я хочу, чтобы он напечатал исходное шестнадцатеричное значение.

Итак, в конечном итоге, мой вопрос: как мне сохранить этот символ в моем выходном файле как 'c8'? Есть ли код форматирования, который может использовать ofstream, или мне нужно прыгнуть через несколько обручей?

Спасибо, ребята!

1 Ответ

0 голосов
/ 03 мая 2018

Как прокомментировал @stark, для печати данных в шестнадцатеричном формате вы можете использовать std::hex, который изменяет формат ваших данных. Однако std::hex только изменяет способ печати чисел, поэтому вы должны указать компилятору обрабатывать ваш текст как числа. К счастью, есть простой способ сделать это. Вы можете использовать

ofstream OutFile("Encrypted.txt");
OutFile << std::hex;
for (const char c : Encryptor.out[0])
{
    OutFile << static_cast<int>(c);
}
// Reset back to normal printing
OutFile << std::dec;

и вы получите правильное шестнадцатеричное значение, а не акцентированный символ E.

Проверьте std::hex здесь http://en.cppreference.com/w/cpp/io/manip/hex

...