From 02b31d6fe23c4dddcf2b7e6db08fa816b1afeb43 Mon Sep 17 00:00:00 2001 From: IvanchenkoIS Date: Mon, 23 Dec 2024 18:41:26 +0000 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8=D0=BB(?= =?UTF-8?q?=D0=B0)=20=D0=BD=D0=B0=20'1.cpp'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.cpp | 98 ++++++++++++++++++++++++----------------------------------- 1 file changed, 39 insertions(+), 59 deletions(-) diff --git a/1.cpp b/1.cpp index b31def0..f7ff133 100644 --- a/1.cpp +++ b/1.cpp @@ -3,85 +3,65 @@ #include using namespace std; -// Вспомогательная функция для преобразования числа от 0 до 15 в шестнадцатеричную цифру -char nibble_to_hex(uint8_t i) { - // Проверка корректности входных данных - assert(0x0 <= i && i <= 0xf); - - // Массив символов для шестнадцатеричных цифр - static const char digits[] = "0123456789abcdef"; - return digits[i]; +// Преобразует число от 0 до 15 в символ шестнадцатеричной системы +char to_hex_digit(uint8_t value) { + assert(value < 16); + const char hex_chars[] = "0123456789abcdef"; + return hex_chars[value]; } -// Вспомогательная функция для получения символа бита ('0' или '1') -char bit_digit(uint8_t byte, uint8_t bit) { - return (byte & (0x1 << bit)) ? '1' : '0'; +// Возвращает символ, представляющий бит ('0' или '1') +char get_bit_char(uint8_t byte, uint8_t pos) { + return (byte & (1 << pos)) ? '1' : '0'; } -// Преобразование указателя void* в uint8_t* -const uint8_t* as_bytes(const void* data) { - return reinterpret_cast(data); +// Преобразует указатель на void в указатель на uint8_t +const uint8_t* to_byte_array(const void* ptr) { + return static_cast(ptr); } -// Печать одного байта в шестнадцатеричном виде -void print_in_hex(uint8_t byte) { - // Печать старшего полубайта - cout << nibble_to_hex(byte >> 4); - // Печать младшего полубайта - cout << nibble_to_hex(byte & 0xf); +// Выводит байт в шестнадцатеричном формате +void display_hex_byte(uint8_t byte) { + cout << to_hex_digit(byte >> 4) << to_hex_digit(byte & 0x0F); } -// Печать блока данных в шестнадцатеричном виде -void print_in_hex(const void* data, size_t size) { - const uint8_t* bytes = as_bytes(data); - for (size_t i = 0; i < size; i++) { - print_in_hex(bytes[i]); - - // Форматирование вывода: пробелы между байтами и перенос строки после 16 байт - if ((i + 1) % 16 == 0) { - cout << '\n'; - } else { - cout << ' '; - } +// Выводит данные в шестнадцатеричном формате +void display_hex_data(const void* data, size_t length) { + const uint8_t* bytes = to_byte_array(data); + for (size_t idx = 0; idx < length; ++idx) { + display_hex_byte(bytes[idx]); + cout << ((idx + 1) % 16 == 0 ? '\n' : ' '); } } -// Печать одного байта в двоичном виде -void print_in_binary(uint8_t byte) { - // Печать всех 8 бит, начиная со старшего - for (int bit = 7; bit >= 0; bit--) { - cout << bit_digit(byte, bit); +// Выводит байт в двоичном формате +void display_binary_byte(uint8_t byte) { + for (int pos = 7; pos >= 0; --pos) { + cout << get_bit_char(byte, pos); } } -// Печать блока данных в двоичном виде -void print_in_binary(const void* data, size_t size) { - const uint8_t* bytes = as_bytes(data); - for (size_t i = 0; i < size; i++) { - print_in_binary(bytes[i]); - - // Форматирование вывода: пробелы между байтами и перенос строки после 4 байт - if ((i + 1) % 4 == 0) { - cout << '\n'; - } else { - cout << ' '; - } +// Выводит данные в двоичном формате +void display_binary_data(const void* data, size_t length) { + const uint8_t* bytes = to_byte_array(data); + for (size_t idx = 0; idx < length; ++idx) { + display_binary_byte(bytes[idx]); + cout << ((idx + 1) % 4 == 0 ? '\n' : ' '); } } // Пример использования функций int main() { - // Тестирование функции nibble_to_hex - assert(nibble_to_hex(0x0) == '0'); - assert(nibble_to_hex(0xa) == 'a'); - assert(nibble_to_hex(0xf) == 'f'); + assert(to_hex_digit(0x0) == '0'); + assert(to_hex_digit(0xA) == 'a'); + assert(to_hex_digit(0xF) == 'f'); + + uint32_t sample = 0x42; + cout << "Hexadecimal representation:\n"; + display_hex_data(&sample, sizeof(sample)); - // Пример использования функций печати - uint32_t test = 0x42; - cout << "Шестнадцатеричный вывод:\n"; - print_in_hex(&test, sizeof(test)); - cout << "\n\nДвоичный вывод:\n"; - print_in_binary(&test, sizeof(test)); + cout << "\n\nBinary representation:\n"; + display_binary_data(&sample, sizeof(sample)); cout << '\n'; return 0;