Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

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;
}