正在使用 BYTE 可移植类型的变量
Is using a variable of type BYTE portable?
我注意到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(。 请注意,您可能使用定义自己的byte
或BYTE
类型的库。
uint8_t
类型,以<cstdint>
或<stdint.h>
定义,保证是正好8位的无符号类型。在具有 CHAR_BIT > 8
的系统上,uint8_t
将不存在,因为没有对象(位字段除外(小于一个字节。
如果你只关心Windows和Linux的可移植性,你可以依靠CHAR_BIT==8
;在这种情况下,你使用unsigned char
或uint8_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
也总是等同于一个八位字节。
- 从模板创建通用打印函数,以打印基元数据类型变量的值
- 指针数据类型变量如何包含对象?
- 将 static_cast<int>(-15) 分配给静态常量字符类型变量
- 将内置类型变量传递给只有一个类类型参数的"+"运算符函数时自动类型转换的构造函数
- 如何为结构类型变量赋值
- 如何将字符类型变量附加到字符串中?
- 共享或私有 openmp 代码中的结构化类型变量
- 有没有办法在 c++ 中制作类型变量?
- 从其他类声明类类型变量会给出 C2143 错误(在"*"之前缺少";")
- 如何检查类中定义的枚举类型变量是否被分配给?
- 将子类实例保存在父类型变量中并通过父变量使用 Child 函数?
- 是否可以在没有结构的情况下创建新的类型变量?
- 为什么类型变量;不调用默认 CTR
- 如何使用CIN将输入整数值获取到char类型变量中
- 如何为 char** 类型变量提供适当的值,以便将其分配给字符串变量
- 在C++标准中哪里说必须初始化 const 内置类型变量的定义
- 为什么可以将其他类型变量用作C 中常量参考参数参数的参数
- Eclipse CDT 打开声明的自动类型变量
- 如何计算长长类型变量中的位数
- 将自动类型变量初始化为零.这种类型安全吗?