From f7f763ed566a57cb4721b58df43129fd301eeb27 Mon Sep 17 00:00:00 2001 From: rogozinay Date: Tue, 16 Jan 2024 22:47:34 +0300 Subject: [PATCH] Add big_digit() func --- main.cpp | 87 ++++++++++++++++++++++---------------------------------- 1 file changed, 34 insertions(+), 53 deletions(-) diff --git a/main.cpp b/main.cpp index 1bfedff..c2b8934 100644 --- a/main.cpp +++ b/main.cpp @@ -1,37 +1,26 @@ #include #include -using namespace std; +#include +#include +#include -// Функция для представления nibble (4 бит) в шестнадцатеричной системе char nibble_to_hex(uint8_t i) { - // Массив цифр в шестнадцатеричной системе char digits[] = "0123456789abcdef"; - - // Проверка на корректность аргумента assert(0x0 <= i && i <= 0xf); - - // Возвращаем символ для nibble из массива digits return digits[i]; } -// Функция для печати одного байта в шестнадцатеричной и двоичной форме void print_in_hex(uint8_t byte) { - // Печать в шестнадцатеричной форме - cout << "Hex: " << nibble_to_hex(byte >> 4) << nibble_to_hex(byte & 0xf) << endl; - - // Печать в двоичной форме - cout << "Binary: "; - for (int i = 7; i >= 0; --i) { - cout << ((byte >> i) & 1); - } - cout << endl; + std::cout << nibble_to_hex(byte >> 4) << nibble_to_hex(byte & 0xf); } +// Функция для преобразования типов const uint8_t* as_bytes(const void* data) { return reinterpret_cast(data); -}; +} +// Функция для печати массива байтов 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++) { @@ -39,60 +28,52 @@ void print_in_hex(const void* data, size_t size) { // Для удобства чтения: пробелы между байтами, по 16 байт на строку. if ((i + 1) % 16 == 0) { - cout << '\n'; + std::cout << '\n'; } else { - cout << ' '; + std::cout << ' '; } } - cout << endl; + std::cout << std::endl; } +// Функция для проверки битов и вывода их в двоичной системе +char bit_digit(uint8_t byte, uint8_t bit) { + if (byte & (0x1 << bit)) { + return '1'; + } + return '0'; +} int main() { - - - // Тестирование функции nibble_to_hex - //for (int i = 0; i <= 0xf; ++i) { - //assert(nibble_to_hex(i) == nibble_to_hex(i)); - //} - - assert(nibble_to_hex(0x0) == '0'); - assert(nibble_to_hex(0x1) == '1'); - assert(nibble_to_hex(0x2) == '2'); - assert(nibble_to_hex(0x3) == '3'); - assert(nibble_to_hex(0x4) == '4'); - assert(nibble_to_hex(0x5) == '5'); - assert(nibble_to_hex(0x6) == '6'); - assert(nibble_to_hex(0x7) == '7'); - assert(nibble_to_hex(0x8) == '8'); - assert(nibble_to_hex(0x9) == '9'); - assert(nibble_to_hex(0xa) == 'a'); - assert(nibble_to_hex(0xb) == 'b'); - assert(nibble_to_hex(0xc) == 'c'); - assert(nibble_to_hex(0xd) == 'd'); - assert(nibble_to_hex(0xe) == 'e'); - assert(nibble_to_hex(0xf) == 'f'); - - // Печать байта в шестнадцатеричной и двоичной форме - //uint8_t test_byte = 0x2f; - //uint8_t test_byte = 0x0; - //uint8_t test_byte = 0xab; - //uint8_t test_byte = 0xff; - uint8_t u8 = 0x42; uint16_t u16 = 0x42; uint32_t u32 = 0x42; std::cout << "u8 bytes: "; print_in_hex(&u8, sizeof(u8)); + + std::cout << "\nu8 binary: "; + for (int i = 7; i >= 0; --i) { + std::cout << bit_digit(u8, i); + } std::cout << '\n'; - std::cout << "u16 bytes: "; + std::cout << "\nu16 bytes: "; print_in_hex(&u16, sizeof(u16)); + + std::cout << "\nu16 binary: "; + for (int i = 15; i >= 0; --i) { + std::cout << bit_digit(u16, i); + } std::cout << '\n'; - std::cout << "u32 bytes: "; + std::cout << "\nu32 bytes: "; print_in_hex(&u32, sizeof(u32)); + + std::cout << "\nu32 binary: "; + for (int i = 31; i >= 0; --i) { + std::cout << bit_digit(u32, i); + } std::cout << '\n'; return 0;