Добавлены коментарии программного кода

main
GorokhovDE 5 месяцев назад
Родитель e3ed9e7cf6
Сommit 55409af4b2

@ -1,84 +1,96 @@
#include <cassert>
#include <cassert>
#include <iostream>
using namespace std;
// Преобразует младшую тетраду (nibble) числа в шестнадцатеричный символ ('0'-'9', 'a'-'f').
char nibble_to_hex(uint8_t i) {
assert(0x0 <= i && i <= 0xf);
if (i < 10) return '0' + i;
return 'a' + (i - 10);
assert(0x0 <= i && i <= 0xf); // Утверждение, что значение i находится в пределах одной тетрады (4 бита).
if (i < 10) return '0' + i; // Если меньше 10, возвращает цифру.
return 'a' + (i - 10); // Если больше, возвращает букву (a-f).
}
// Тестирует функцию nibble_to_hex.
void test_nibble_to_hex() {
assert(nibble_to_hex(0x0) == '0');
assert(nibble_to_hex(0xf) == 'f');
assert(nibble_to_hex(0x0) == '0'); // Тест: 0x0 → '0'
assert(nibble_to_hex(0xf) == 'f'); // Тест: 0xf → 'f'
cout << "nibble_to_hex() tests passed!\n";
}
// Извлекает младшую тетраду из байта.
uint8_t low_nibble(uint8_t byte) {
return byte & 0x0f;
return byte & 0x0f; // Маска оставляет младшие 4 бита.
}
// Извлекает старшую тетраду из байта.
uint8_t high_nibble(uint8_t byte) {
return byte >> 4;
return byte >> 4; // Сдвиг вправо на 4 бита.
}
// Тестирует функции извлечения тетрад.
void test_nibbles() {
assert(low_nibble(0xab) == 0xb);
assert(high_nibble(0xab) == 0xa);
assert(low_nibble(0xab) == 0xb); // Младшая тетрада 0xab → 0xb
assert(high_nibble(0xab) == 0xa); // Старшая тетрада 0xab → 0xa
cout << "Nibble extraction tests passed!\n";
}
// Печатает байт в шестнадцатеричном виде.
void print_in_hex(uint8_t byte) {
cout << nibble_to_hex(high_nibble(byte))
<< nibble_to_hex(low_nibble(byte));
cout << nibble_to_hex(high_nibble(byte)) // Старшая тетрада.
<< nibble_to_hex(low_nibble(byte)); // Младшая тетрада.
}
// Тестирует печать байтов в шестнадцатеричном виде.
void test_print_in_hex() {
print_in_hex(0x0); cout << "\n";
print_in_hex(0xab); cout << "\n";
print_in_hex(0xff); cout << "\n";
print_in_hex(0x0); cout << "\n"; // Печатает: 00
print_in_hex(0xab); cout << "\n"; // Печатает: ab
print_in_hex(0xff); cout << "\n"; // Печатает: ff
}
// Преобразует указатель на данные в указатель на массив байтов.
const uint8_t* as_bytes(const void* data) {
return reinterpret_cast<const uint8_t*>(data);
return reinterpret_cast<const uint8_t*>(data); // Преобразование типа указателя.
}
// Печатает массив байтов в шестнадцатеричном виде.
void print_in_hex(const void* data, size_t size) {
const uint8_t* bytes = as_bytes(data);
const uint8_t* bytes = as_bytes(data); // Преобразует данные в массив байтов.
for (size_t i = 0; i < size; i++) {
print_in_hex(bytes[i]);
cout << ((i + 1) % 16 == 0 ? '\n' : ' ');
print_in_hex(bytes[i]); // Печатает каждый байт в шестнадцатеричном виде.
cout << ((i + 1) % 16 == 0 ? '\n' : ' '); // Разделяет байты пробелом, каждые 16 байтов перенос строки.
}
}
// Тестирует печать массива байтов (например, целого числа).
void test_print_array_in_hex() {
uint32_t u32 = 0x42;
uint32_t u32 = 0x42; // Число 0x42 в 4 байтах.
cout << "u32 bytes: ";
print_in_hex(&u32, sizeof(u32));
print_in_hex(&u32, sizeof(u32)); // Печатает байты числа.
cout << "\n";
}
// Возвращает символ '1' или '0', если указанный бит установлен или нет.
char bit_digit(uint8_t byte, uint8_t bit) {
return (byte & (1 << bit)) ? '1' : '0';
return (byte & (1 << bit)) ? '1' : '0'; // Проверяет, установлен ли бит.
}
// Печатает байт в двоичном виде (8 бит).
void print_in_binary(uint8_t byte) {
for (int8_t bit = 7; bit >= 0; --bit) {
for (int8_t bit = 7; bit >= 0; --bit) { // Перебирает биты с 7-го по 0-й.
cout << bit_digit(byte, bit);
}
}
// Тестирует печать байтов в двоичном виде.
void test_print_in_binary() {
print_in_binary(0x2a); cout << "\n"; // 00101010
print_in_binary(0x2a); cout << "\n"; // Печатает: 00101010
}
// Основная функция программы: выполняет тесты и демонстрации.
int main() {
test_nibble_to_hex();
test_nibbles();
test_print_in_hex();
test_print_array_in_hex();
test_print_in_binary();
return 0;
test_nibble_to_hex(); // Тесты nibble_to_hex.
test_nibbles(); // Тесты извлечения тетрад.
test_print_in_hex(); // Тесты печати в шестнадцатеричном виде.
test_print_array_in_hex(); // Тесты печати массива байтов.
test_print_in_binary(); // Тесты печати в двоичном виде.
return 0; // Завершение программы.
}

Загрузка…
Отмена
Сохранить