#include #include #include using namespace std; // Преобразование числа от 0 до 15 в символ шестнадцатеричной системы char hex_char(uint8_t value) { assert(value < 16); // Гарантируем, что значение в допустимых пределах return "0123456789ABCDEF"[value]; // Используем заглавные буквы для разнообразия } // Извлекает бит как символ ('0' или '1') char bit_to_char(uint8_t byte, uint8_t position) { return (byte & (1 << position)) ? '1' : '0'; } // Преобразует указатель на void в uint8_t* const uint8_t* cast_to_byte_array(const void* ptr) { return reinterpret_cast(ptr); // Используем reinterpret_cast вместо static_cast } // Выводит один байт в шестнадцатеричном представлении void print_byte_as_hex(uint8_t byte) { cout << hex_char(byte >> 4) << hex_char(byte & 0x0F); } // Выводит массив байт в шестнадцатеричном представлении void print_data_as_hex(const void* data, size_t size) { const uint8_t* bytes = cast_to_byte_array(data); for (size_t i = 0; i < size; ++i) { print_byte_as_hex(bytes[i]); cout << (i % 16 == 15 || i == size - 1 ? '\n' : ' '); // Перенос строки каждые 16 байт } } // Выводит один байт в двоичном представлении void print_byte_as_binary(uint8_t byte) { for (int i = 7; i >= 0; --i) { // Сохраняем порядок от старших битов к младшим cout << bit_to_char(byte, i); if (i % 4 == 0 && i != 0) cout << '_'; // Разделяем на группы по 4 бита } } // Выводит массив байт в двоичном представлении void print_data_as_binary(const void* data, size_t size) { const uint8_t* bytes = cast_to_byte_array(data); for (size_t i = 0; i < size; ++i) { print_byte_as_binary(bytes[i]); cout << (i % 4 == 3 || i == size - 1 ? '\n' : ' '); // Перенос строки каждые 4 байта } } // Тестирование функций int main() { // Проверка преобразования числа в шестнадцатеричный символ assert(hex_char(0) == '0'); assert(hex_char(10) == 'A'); assert(hex_char(15) == 'F'); uint32_t sample = 0x42; cout << "Hexadecimal representation:\n"; print_data_as_hex(&sample, sizeof(sample)); cout << "\nBinary representation:\n"; print_data_as_binary(&sample, sizeof(sample)); cout << '\n'; return 0; }