<<
перегружен для char
типов для вывода форматированного символа ASCII. Данные (единицы и нули) в вашем массиве memblock
точно считываются в двоичном виде. Это просто способ их отображения, который является ASCII. Вместо char[]
для memblock
, сделайте его uint8_t[]
. Затем при выводе выполните
std::cout << std::hex << std::fill('0') << std::setw(2) << memblock[i];
^ ^ ^
| | |
| | sets the width of the next output
| sets the fill character (default is space)
tells the stream to output all numbers in hexadecimal
. Вам потребуется #include <iomanip>
, чтобы манипуляторы формата потока hex
, fill
и setw
работали.
Обратите внимание, что setw
будет установлен в потоке только для следующей операции вывода, в то время как hex
и fill
будут установлены до тех пор, пока не будет явно задано иное. Тем не менее, вам нужно установить эти два манипулятора только один раз, вероятно, за пределами вашего l oop. Затем, когда вы закончите, вы можете установить их обратно как:
std::cout << std::dec << std::fill(' ');
См. https://en.cppreference.com/w/cpp/io/basic_ostream/operator_ltlt2 для списка перегруженных operator<<
функций для char
и char
массивы.