现在 c++17 有了
std::byte
,我一直在寻找一种方法,将读取文件到 char
的代码转换为将文件读取到 byte
的代码。文件包含字节,而不是一堆整数。
byte
是错误的,而将文件读入char
是正确的。
如果
byte
不是为了访问内存而设计的,以此类推,文件,那么它的目的是什么?正如其他两个问题中引用的:
与 char 和 unsigned char 一样,它可用于访问原始内存 被其他对象占用(对象表示),但与那些对象不同 类型,它不是字符类型,也不是算术类型。 A byte只是位的集合,并且只是按位逻辑运算符 为它定义了。
这听起来像是应该用于读取文件的确切类型,而不是字符。
您可能误解了事情。
byte
非常适合“访问内存”。当存储只是字节序列而不是字符数组时,您打算使用该类型。
Iostream 类型不能专用于
byte
,因为它们是围绕字符作为接口而设计的。也就是说,他们并不将文件视为字节序列;而是将文件视为字节序列。他们将它们视为字符序列。现在,您当然可以通过使用一两次强制转换直接读入 byte
数组。但这不是 iostream 本身的思考方式。
您必须区分 iostream 的工作方式和 files 的工作方式。毕竟,Iostream 只是一个文件 IO 库;它并不是文件 API 的最终目标。
大多数用于读取二进制数据的文件 API 采用
void*
而不是字符数组。 std::fread/fwrite
,等等。
也就是说,你应该将其视为
std::byte
的问题,而不是iostream的问题。只是一长串中的另一个。