From d850739a95c01d06cd2ac5b4830b7f90d52824ba Mon Sep 17 00:00:00 2001 From: SpelnikovNS <–spelnikovns@mpei.ru> Date: Wed, 25 Dec 2024 02:15:41 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A4=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8=20pr?= =?UTF-8?q?int=5Fin=5F*()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.cpp | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 1.cpp diff --git a/1.cpp b/1.cpp new file mode 100644 index 0000000..ce4b8e3 --- /dev/null +++ b/1.cpp @@ -0,0 +1,69 @@ +#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; +}