我在 GCC 和 MinGW 中寻找 uint24_t 和 uint48_t 类型。我知道两者都不是标准化的,但我在网上遇到了对它们的引用,我试图弄清楚:
- 我需要为他们包括什么标题。
- 无论它们是跨平台的(至少在 Windows、Linux 和 Mac OSX 上),还是仅针对特定目标。
- 他们叫什么名字。uint24_t,__uint24,__uint24_t?
标准 uintXX_t 类型在 stdint.h (C, C++98) 或 cstdint (C++11) 中提供。
在 8 位数据、24 位地址的 AVR 架构上,GCC 提供了一个内置的 24 位整数,但它是不可移植的。有关它的更多信息,请参见http://gcc.gnu.org/wiki/avr-gcc 。
GCC 或 MinGW 没有以独立于平台的方式提供标准的 24 位或 48 位整数类型,但是在几乎任何平台上获取可移植 24 位数字的一种简单方法是使用位域:
struct bitfield24 {
uint32_t value : 24;
};
bitfield24 a;
a.value = 0xffffff;
a.value += 1;
assert(a == 0);
使用 uint64_t 作为基础也可以对 48 位执行相同的操作。