Класс byte
Класс byte был добавлен в стандарт C++17 и представляет
собой отдельный тип данных, предназначенный для хранения
одного байта информации. В отличие от char, который
также занимает один байт, byte не является символьным
типом и не предназначен для хранения символов. Он используется
для работы с сырыми бинарными данными, где важно само значение
байта, а не его символьная интерпретация. Объявление
std::byte находится в заголовочном файле <cstddef>.
Класс byte является enum class с базовым типом
unsigned char. Это означает, что значения byte
не могут быть неявно преобразованы к целочисленным типам и
наоборот. Для выполнения арифметических и битовых операций
необходимо явно преобразовывать значения с помощью
std::to_integer. При этом для byte определены
побитовые операторы &, |, ^, ~,
а также операторы сдвига << и >>.
Синтаксис
std::byte value{0};
std::byte value = std::byte{0};
Для создания значения типа byte используется
списочная инициализация с целочисленным литералом в диапазоне
от 0 до 255.
Пример
Давайте создадим несколько значений типа byte и
выведем их числовые значения с помощью std::to_integer:
#include <iostream>
#include <cstddef>
using namespace std;
int main()
{
byte a{10};
byte b{20};
cout << to_integer<int>(a) << endl;
cout << to_integer<int>(b) << endl;
return 0;
}
Результат выполнения кода:
10
20
Пример
Давайте выполним побитовые операции над значениями типа
byte. Операторы &, | и ^
работают напрямую с byte без явного преобразования:
#include <iostream>
#include <cstddef>
using namespace std;
int main()
{
byte a{0b1100};
byte b{0b1010};
byte res_and = a & b;
byte res_or = a | b;
byte res_xor = a ^ b;
cout << to_integer<int>(res_and) << endl;
cout << to_integer<int>(res_or) << endl;
cout << to_integer<int>(res_xor) << endl;
return 0;
}
Результат выполнения кода:
8
14
6
Пример
Давайте поработаем с массивом значений типа byte
и выведем каждый элемент, преобразовав его к int:
#include <iostream>
#include <cstddef>
using namespace std;
int main()
{
byte arr[] = {byte{1}, byte{2}, byte{3}, byte{4}, byte{5}};
for (byte b : arr)
{
cout << to_integer<int>(b) << " ";
}
cout << endl;
return 0;
}
Результат выполнения кода:
1 2 3 4 5