Вы не можете распечатать содержимое png-файла на консоль, это двоичный файл, отличный от файла сертификата, который содержит сертификат в кодировке MIME и, следовательно, является обычным текстовым файлом.
Печатный файл (т. Е. Текст) содержит только байты, представляющие символы стандартного ASCII (0x20 - 0x7F), и использует символы форматирования ASCII (CR, LF и т. Д.) Предсказуемым образом.Кроме того, он не содержит байта 0x00, который используется в C / C ++ для обозначения конца строки.Бинарный файл может содержать любой байт в любом порядке.
Итак, при попытке напечатать его произойдут две вещи: a) он остановится на первом найденном байте 0x00;b) каждый байт, содержащий не-ASCII-символ, будет напечатан как специальный символ (если он находится в кодовой странице, активной для консоли) или вообще ничего, и байты, содержащие символы ASCII-форматирования, будут «выполняться», как если бы онибыло фактическое форматирование в текстовом файле.
Результат: либо вы вообще ничего не увидите, либо просто несколько странных символов, смешанных со случайными переводами строк, вкладками и т. д.
Чтобы иметьчто вы ожидаете, в первую очередь, чтобы точно определить, что это такое.Хотите увидеть содержимое png в MIME-кодировке?Затем вы должны использовать подпрограмму MIME-кодирования (например, this ).Или вы хотите напечатать шестнадцатеричное значение каждого байта?Затем вам нужно сделать std::cout << std::hex << byte
(как предложил Nawaz) или printf("%02x")
для каждого байта в цикле.
Также для файла сертификата вы должны открыть его как текстовый файл, а не как двоичный файл.В противном случае у вас будет два нежелательных эффекта: нет нормализации LF (например, в Windows EOL помечен CR + LF, а в Unix / Linux это просто LF) и нет обработки для EOF char.