std :: byte的目的是什么?

23 c++ byte c++17

现在c ++ 17了std::byte,我正在寻找一种方法将读取文件的char代码转换为读取文件的代码byte.一个文件包含字节,而不是一堆整数.

然后我读到了这个问题另一个问题,其中人们认为阅读文件byte是错误的,并且阅读文件char是正确的.

如果byte不是为访问内存而设计的,并且通过类比,文件,那么它的目的是什么?正如其他两个问题所引述:

与char和unsigned char一样,它可以用于访问其他对象占用的原始内存(对象表示),但与这些类型不同,它不是字符类型,也不是算术类型.字节只是一个位集合,只为它定义了按位逻辑运算符.

这听起来像应该用于读取文件的确切类型,而不是字符.

Nic*_*las 17

你可能误解了一些事情.

byte非常适合"访问内存".当存储只是一个字节序列而不是字符数组时,您打算使用该类型.

Iostream类型不能专门用byte,因为它们是以字符为界面设计的.也就是说,他们不会将文件视为字节序列; 他们认为它们是人物的序列.现在,您当然可以byte使用一两个演员直接读入数组.但这不是iostream原生思考的方式.

您必须区分iostream的工作方式和文件的工作方式.毕竟Iostream只是一个文件IO库; 它几乎不是最终的全部文件API.

大多数用于读取二进制数据的文件API都取void*而不是字符数组.std::fread/fwrite等等.

也就是说,你应该想到这一点,不是问题std::byte,而是iostream的一个问题.在他们的长队中只是另一个.

  • Iostream再次罢工,只是停止使用它 (8认同)
  • @Nicol Bolas:[此评论](/sf/ask/3061514291/?noredirect=1&lq=1#comment81917307_43738691) 表明 iostreams 不适合对文件的原始访问 - 不正确吗?也许您可以澄清字节和字符之间的确切区别是什么? (3认同)
  • 据我所知,iostream (`std::fstream`) 是使用 Unicode 文件名的唯一跨平台方式 - 使用 `std::filesystem::path` 重载。是否有计划为 `std::fopen` 添加类似的重载或提供一种不同的方式来从文件中读取二进制数据? (2认同)