正在使用 BYTE 可移植类型的变量

Is using a variable of type BYTE portable?

本文关键字:类型 变量 可移植 BYTE      更新时间:2023-10-16

我注意到windows.h有这个:

 typedef unsigned char BYTE;

我不想使用此头文件,因为我希望我的代码是可移植的。

是否有任何其他头文件以可移植的方式定义BYTE

我所说的可移植是指它可以在Linux系统上编译。

根据定义,unsigned char的大小正好是一个"字节"。C 和 C++ 中的"字节"正好是 CHAR_BIT 位; CHAR_BIT保证至少为 8但可以更大。

如果需要字节,请使用类型 unsigned char 。 您可以直接使用它,也可以定义自己的typedef例如

typedef unsigned char byte;

如果您认为它使代码更清晰(我不认为它确实如此,但是 YMMV(。 请注意,您可能使用定义自己的byteBYTE类型的库。

uint8_t类型,以<cstdint><stdint.h>定义,保证是正好8位的无符号类型。在具有 CHAR_BIT > 8 的系统上,uint8_t将不存在,因为没有对象(位字段除外(小于一个字节。

如果你只关心Windows和Linux的可移植性,你可以依靠CHAR_BIT==8;在这种情况下,你使用unsigned charuint8_t可能并不重要。

如果您希望代码真正可移植,如果需要字节,请使用unsigned char,如果需要八位字节(根据定义正好是 8 位(,请使用 uint8_t

你还没有说你想让BYTE具备什么特征,所以我不能比这更具体。

包含<cstdint>并使用std::uint8_t(如果您认为字节是有符号的,则std::int8_t(。 如果要使用不同的标识符(如 Byte ,而不是 std::uint8_t ,则可以添加 typedef

#include <cstdint>
typedef std::uint8_t Byte;
...
Byte foo = 0;

这是便携的事情。 在每个主流的现代平台上,unsigned char也总是等同于一个八位字节。