MinGW中的uint24_t和uint48_t

Jam*_*rey 7 c++ gcc mingw

我正在寻找GCC和MinGW中的uint24_t和uint48_t类型.我知道它们都不是标准化的,但我在网上遇到了对它们的引用,我想弄清楚:

  1. 我需要为他们包含什么标题.
  2. 无论是跨平台(至少在Windows,Linux和Mac OSX上),还是仅针对特定目标.
  3. 他们的名字是什么.uint24_t,__ uint24,__ uint24_t?

wjl*_*wjl 11

标准的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);
Run Code Online (Sandbox Code Playgroud)

使用uint64_t作为基数,可以对48位进行相同的操作.