标准::字节在奇数平台上
std::byte on odd platforms
阅读Herb Sutter关于最近C++标准会议的博客文章,它注意到std::byte
被添加到C++17中。 作为初步阅读,我有一些担忧,因为它使用unsigned char
,以避免严格的混叠规则的复杂性。
我最担心的是,它在CHAR_BIT
不是 8 的平台上如何工作? 我曾在CHAR_BIT
为 16 或 32 的平台(通常是 DSP)上工作过。 鉴于std::byte
用于处理"面向字节的内存访问",并且大多数人将字节理解为表示八位字节(而不是基础字符类型的大小),对于希望这将解决连续 8 位内存块的个人来说,这将如何工作?
我已经看到有人只是假设CHAR_BIT
是 8(不是晚上知道CHAR_BIT
存在...... 一种叫做std::byte
的类型可能会给个人带来更多的困惑。
猜我所期望的是他们正在引入一种类型,以允许在所有情况下一致地寻址/访问顺序八位字节。 有许多面向八位字节的协议,其中有一个库或类型保证在所有平台上一次访问一个八位字节的内存会很有用,无论给定平台上的CHAR_BIT
等于什么。
我绝对可以理解想要很好地指定某些东西被用作字节序列而不是字符序列,但它似乎不像许多其他东西那样有用。
鉴于
std::byte
用于处理"面向字节的内存访问",并且大多数人将字节理解为表示八位字节(而不是底层字符类型的大小),这将如何适用于希望这将解决连续 8 位内存块的个人?
你不能理解错误的东西,然后期望世界重新安排自己以满足你的期望。
大多数人之所以认为字节和八位字节是一回事,是因为在大多数情况下它是真的。绝大多数典型计算机都有CHAR_BIT == 8
.这并不意味着它一直都是正确的。
- 不是八位字节。
char
、signed char
和unsigned char
的大小为一个字节。
好的一面是,不知道这一点的人实际上是不需要知道的人。如果你在一台字节超过一个八位字节的机器上工作,你是那种比其他任何八位字节更需要了解这一点的开发人员。
如果我们在这里谈论理论,那么答案很简单:只要知道字节与八位字节不同。如果我们谈论的是具体的东西,那么答案是你要么已经知道区别,要么你不需要知道它(希望:))。最糟糕的情况是你痛苦地学习这一点,但这是第三组在没有异国情调知识的情况下在异国情调平台上工作的开发人员。
如果你想要一个八位字节的等效项,它已经存在:
- int8_t
- uint8_t
请注意,它们"仅在实现直接支持类型时才提供"。
- 从不同线程使用int64的不同字节安全吗
- 正在查找文档以获得PS4平台的C++中的设备信息
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 在UNIX系统中使用DIR查找文件的字节大小
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- std::当在256字节边界上写入整数时,流的奇怪行为
- 当比特(而不是字节)的顺序至关重要时的持久性
- 从文件中读取多个字节,并将它们存储在C++中进行比较
- 如何在文件中查找字节序列
- luaL_dofile在已知良好的字节码上失败,可以使用未编译的版本
- 字节到位运算符重载C++
- 在java中读取c++字节的位字段
- 使用 std::vector::reverse_iterator 将 int 序列化为字节向量?
- 字节真的是最小可寻址单元吗
- struct.error:解压缩 C++ 结构时,解包需要 288 字节的缓冲区
- 读取文件中所有可能的十六进制 16 字节序列并打印每个序列
- 如何使用 OpenCV 解码在两个 UWP 应用之间发送的图像字节?
- 长长初始化和 8 字节平台形式
- C++-独立于平台的函数,用于将字节数组转换为值,反之亦然
- C++:如何以独立于平台的方式读取和写入多字节整数值