第2.20章: ::std::byte
概述
::std::byte 是表示单个字节数据的类型。
与 char 或 unsigned char 不同,
::std::byte 不是字符类型,不能用于文本。
它只是一个小的、强类型的存储单元。
在本章中,你将学到:
::std::byte是什么- 如何创建并使用
::std::byte值 - 如何在
::std::byte与整数之间转换 ::std::byte为何存在
1. 什么是 ::std::byte?
::std::byte 是类似枚举的类型,表示单个字节。
它并不直接存储字符或数字,而是存储原始字节值。
::std::byte b{};
这创建一个值为零的 ::std::byte。
2. 初始化 ::std::byte
你可以用 ::std::byte{} 初始化一个 ::std::byte,
或者从整数转换而来。
::std::byte a{}; // zero
::std::byte b{static_cast<unsigned char>(42)};
注意:从整数转换时必须使用显式转换。 这可以防止意外误用。
3. 把 ::std::byte 转换为整数
要把 ::std::byte 转回整数,请使用
::std::to_integer。
::std::byte b{static_cast<unsigned char>(7)};
unsigned int x = ::std::to_integer<unsigned int>(b);
这会提取存储在该字节中的数值。
4. ::std::byte 为何存在?
在 ::std::byte 出现之前,程序员常用
unsigned char 表示原始字节。但 unsigned char
仍然是字符类型,这容易造成混淆。
::std::byte 通过提供这样一种类型来解决这个问题:
- 它明确用于原始数据
- 它不会被误认为字符
- 它的行为不像数字
- 它只支持位运算
5. ::std::byte 上的操作
::std::byte 支持如下位运算:
|(按位或)&(按位与)^(按位异或)<<(左移)>>(右移)
::std::byte b{static_cast<unsigned char>(1)};
b = b << 2; // shift left
这些操作把字节当作原始位来处理,而不是当作数字。
要点
::std::byte是表示单个字节的类型。- 它不是字符类型,也不是数字。
- 它与整数之间需要显式转换。
- 它只支持位运算。
- 当你想表达“这是原始数据”时,它很有用。