c++ - 用 uint8_t 或 char 来表示按字节排列的二进制数据哪个更好?

标签 c++

我喜欢 uint8_t,因为我觉得它的意图(二进制数据,而不是字符)表达得更好。但是,有许多我可能想要调用的基于字符的 I/O 函数。只是想知道是否有人们遵守的最佳实践?这是我第一次涉足字节级 I/O。

最佳答案

char 的问题是它可能是有符号类型(范围至少为 -127..+127)或无符号类型(范围至少为 0..255)。

unsigned char比普通的好char用于面向二进制字节的数据。

uint8_t ,如果存在,将具有与 unsigned char 相同的范围和表示形式,并且可能只是同一类型的另一个名称。

请注意,C++(如 C)将 字节 定义为给定系统上的最小可寻址存储单元。它至少 8 位,并且在您可能使用的任何系统上都可能恰好是 8 位,但允许更宽。宏CHAR_BIT , 在 <stddef.h> 中定义或 <cstddef> , 告诉您一个字节中的位数。

如果您想绝对保证您使用的是 8 位字节,请查询 CHAR_BIT 的值或使用 uint8_t .如果字节大于 8 位,则 uint8_t将不存在(因为不会有满足其要求的类型)。

关于c++ - 用 uint8_t 或 char 来表示按字节排列的二进制数据哪个更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21296997/

相关文章:

c++ - 类树的一个分支如何使其所有零初始化成员都是垃圾?

c++ - 寻找多数元素的摩尔投票算法

c++ - 如果没有,创建一个包含数据的文本文件,然后读取它以检索数据

c++ - Qt 信号和槽线程安全

C++ 如何使用 readprocessmemory 查找进程内存中使用的最后一个(偏移量 - 地址)

c++ - boost asio 读缓冲区

c++ - 写入 std::vector 的保留空间会导致段错误吗?

c++ - boost::iostreams::copy() 关闭源而不是接收器

c++ - 如何知道函数何时必须是虚拟的?

c++ - 我应该怎么做才能获得 'dynamic' 数组的大小?