Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
62 строки
1.8 KiB
C++
62 строки
1.8 KiB
C++
#include <cassert>
|
|
#include <cstdint>
|
|
#include <iostream>
|
|
|
|
// Òàáëèöà äëÿ ïåðåâîäà ïîëóáàéòà â ñèìâîë hex (lowercase)
|
|
static char to_hex_digit(uint8_t nibble) {
|
|
assert(nibble < 16);
|
|
constexpr char digits[] = "0123456789abcdef";
|
|
return digits[nibble];
|
|
}
|
|
|
|
// Ïå÷àòü îäíîãî áàéòà â hex (äâà ñèìâîëà)
|
|
void print_in_hex(uint8_t byte) {
|
|
std::cout << to_hex_digit(byte >> 4) << to_hex_digit(byte & 0x0F);
|
|
}
|
|
|
|
// Ïå÷àòü ïðîèçâîëüíîãî áëîêà äàííûõ â hex, ïðîáåëû ìåæäó áàéòàìè, ïåðåíîñ ïîñëå 16
|
|
void print_in_hex(const void* data, size_t size) {
|
|
const auto* bytes = static_cast<const uint8_t*>(data);
|
|
for (size_t i = 0; i < size; ++i) {
|
|
print_in_hex(bytes[i]);
|
|
if (i + 1 < size) {
|
|
std::cout << ' ';
|
|
if ((i + 1) % 16 == 0) std::cout << '\n';
|
|
}
|
|
}
|
|
}
|
|
|
|
// Ïå÷àòü îäíîãî áàéòà â áèíàðíîì âèäå (8 ñèìâîëîâ)
|
|
void print_in_binary(uint8_t byte) {
|
|
for (int bit = 7; bit >= 0; --bit) {
|
|
std::cout << (((byte >> bit) & 1) ? '1' : '0');
|
|
}
|
|
}
|
|
|
|
// Ïå÷àòü áëîêà äàííûõ â áèíàðíîì âèäå, ïðîáåë ìåæäó áàéòàìè, ïåðåíîñ ïîñëå 4 áàéò
|
|
void print_in_binary(const void* data, size_t size) {
|
|
const auto* bytes = static_cast<const uint8_t*>(data);
|
|
for (size_t i = 0; i < size; ++i) {
|
|
print_in_binary(bytes[i]);
|
|
if (i + 1 < size) {
|
|
std::cout << ' ';
|
|
if ((i + 1) % 4 == 0) std::cout << '\n';
|
|
}
|
|
}
|
|
}
|
|
|
|
int main() {
|
|
// Ìèíè-òåñòû hex-òàáëèöû
|
|
assert(to_hex_digit(0) == '0');
|
|
assert(to_hex_digit(10) == 'a');
|
|
assert(to_hex_digit(15) == 'f');
|
|
|
|
// Äåìîíñòðàöèÿ ðàáîòû ïå÷àòè
|
|
uint32_t sample = 0x1234ABCD;
|
|
std::cout << "Hex dump:\n";
|
|
print_in_hex(&sample, sizeof(sample));
|
|
std::cout << "\n\nBinary dump:\n";
|
|
print_in_binary(&sample, sizeof(sample));
|
|
std::cout << '\n';
|
|
return 0;
|
|
} |