#include #include #include // Таблица для перевода полубайта в символ hex (lowercase) static char to_hex_digit(uint8_t nibble) { assert(nibble < 16); constexpr char digits[] = "0123456789abcdef"; return digits[nibble]; } // Печать одного байта в hex (два символа) void print_in_hex(uint8_t byte) { std::cout << to_hex_digit(byte >> 4) << to_hex_digit(byte & 0x0F); } // Печать произвольного блока данных в hex, пробелы между байтами, перенос после 16 void print_in_hex(const void* data, size_t size) { const auto* bytes = static_cast(data); for (size_t i = 0; i < size; ++i) { print_in_hex(bytes[i]); if (i + 1 < size) { std::cout << ' '; if ((i + 1) % 16 == 0) std::cout << '\n'; } } } // Печать одного байта в бинарном виде (8 символов) void print_in_binary(uint8_t byte) { for (int bit = 7; bit >= 0; --bit) { std::cout << (((byte >> bit) & 1) ? '1' : '0'); } } // Печать блока данных в бинарном виде, пробел между байтами, перенос после 4 байт void print_in_binary(const void* data, size_t size) { const auto* bytes = static_cast(data); for (size_t i = 0; i < size; ++i) { print_in_binary(bytes[i]); if (i + 1 < size) { std::cout << ' '; if ((i + 1) % 4 == 0) std::cout << '\n'; } } } int main() { // Мини-тесты hex-таблицы assert(to_hex_digit(0) == '0'); assert(to_hex_digit(10) == 'a'); assert(to_hex_digit(15) == 'f'); // Демонстрация работы печати uint32_t sample = 0x1234ABCD; std::cout << "Hex dump:\n"; print_in_hex(&sample, sizeof(sample)); std::cout << "\n\nBinary dump:\n"; print_in_binary(&sample, sizeof(sample)); std::cout << '\n'; return 0; }