0

我想byte在我的 C++ 程序中定义一个类型,基本上是unsigned char什么是最惯用的方法?

我想定义一个byte类型来抽象出不同的表示形式,并使创建这种新byte(8位)类型的类型安全数组成为可能,该数组由unsigned char我正在为一个非常具体的用例开发的位操作库支持我正在创建的程序。我希望它非常明确,这是一个特定于我的程序域的 8 位字节,并且不受基于平台或编译器的不同实现的影响。

4

4 回答 4

4

char, unsigned char, orsigned char都是一个字节;std::uint8_t(from <cstdint>) 是一个 8 位字节(也存在带符号的变体)。最后一个仅存在于具有 8 位字节的系统上。还有std::uint_least8_t(来自同一个标头),它至少有8 位和std::uint_fast8_t,它至少有 8 位,应该是最有效的。

于 2012-11-09T16:26:20.830 回答
2

最惯用的方法是只使用signed charor unsigned char。如果你想调用它,byte或者如果你需要强类型,你可以使用 typedef,你可以使用 BOOST_STRONG_TYPEDEF。

如果您需要它恰好是 8 位,您可以使用uint8_tfrom<cstdint>但不保证在所有平台上都存在。

于 2012-11-09T16:27:55.123 回答
2

老实说,这对我来说是 C++ 中最烦人的“特性”之一。

是的,您可以使用std::uint8_tor unsigned char,在大多数系统上,前者将是typedef后者。

但是...这不是类型安全的,因为typedef不会创建新类型。委员会拒绝在标准中添加“强类型定义”。

考虑

void foo (std::uint8_t);
void foo (unsigned char); // ups...
于 2012-11-09T16:37:30.427 回答
1

我目前正在使用 uint8_t 方法。我的看法是,如果平台没有 8 位类型(在这种情况下,我的代码将无法在该平台上运行),那么我无论如何都不希望它运行,因为我最终会遇到意外行为是因为我在处理数据时假设它是 8 位,而实际上它不是。所以我不明白为什么要使用 unsigned char,假设它是 8 位,然后根据该假设执行所有计算。在我看来,这只是自找麻烦。

于 2012-11-09T18:46:29.173 回答