我想在我的C ++程序中定义一个byte
类型,基本上是unsigned char
什么是最惯用的方法呢?
我想定义一个byte
类型来抽象出不同的表示形式,并且可以创建由{{1}支持的这种新byte
(8位)类型的类型安全数组。对于一个位操作库,我正在研究我正在创建的程序的一个非常具体的用例。我希望它非常显式这是一个特定于我的程序域的8位字节,并且不受基于平台或编译器的不同实现的影响。
答案 0 :(得分:4)
char
,unsigned char
或signed char
都是一个字节; std::uint8_t
(来自<cstdint>
)是一个8位字节(也存在一个带符号的变体)。最后一个仅存在于具有8位字节的系统上。还有std::uint_least8_t
(来自相同的标题),至少 8位和std::uint_fast8_t
,它至少有8位,应该是最有效的一位
答案 1 :(得分:2)
最常用的方法是使用signed char
或unsigned char
。你可以使用typedef来调用它byte
,或者如果你需要强类型,你可以使用BOOST_STRONG_TYPEDEF。
如果您需要它恰好是8位,则可以使用uint8_t
中的<cstdint>
,但不保证在所有平台上都存在。
答案 2 :(得分:2)
老实说,这对我来说是C ++中最令人恼火的“功能”之一。
是的,您可以使用std::uint8_t
或unsigned char
,在大多数系统上,前者将是后者的typedef
。
但是......这不是类型安全的,因为typedef
不会创建新类型。而且委员会拒绝在标准中添加“强类型”。
考虑
void foo (std::uint8_t);
void foo (unsigned char); // ups...
答案 3 :(得分:1)
我目前正在使用uint8_t方法。我看到它的方式是,如果一个平台没有8位类型(在这种情况下我的代码将无法在该平台上运行),那么我不希望它继续运行,因为我最终会出乎意料行为是由于我在假设它是8位的情况下处理数据,而实际上并非如此。所以我不明白为什么你应该使用unsigned char,假设它是8位,然后根据该假设执行所有计算。我认为这只是一个问题。