我注意到windows.h
有这个:
typedef unsigned char BYTE;
我不想使用这个头文件,因为我希望我的代码可以移植。
是否有任何其他头文件以可移植的方式定义BYTE
?
便携式我的意思是它在Linux系统上编译。
答案 0 :(得分:1)
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
,如果需要 octets ,则使用uint8_t
按照定义恰好是8位)。
你还没有说明你希望BYTE
有什么特征,所以我不能比那更具体。
答案 1 :(得分:0)
包括<cstdint>
并使用std::uint8_t
(或std::int8_t
,如果您认为字节为已签名)。如果要使用其他标识符(例如Byte
,而不是std::uint8_t
),则可以添加typedef。
#include <cstdint>
typedef std::uint8_t Byte;
...
Byte foo = 0;
这是最便携式的事情。在每个主流的现代平台上,unsigned char
也总是等同于一个8位字节。