MinGW 中的 uint24_t 和 uint48_t

Posted

技术标签:

【中文标题】MinGW 中的 uint24_t 和 uint48_t【英文标题】:uint24_t and uint48_t in MinGW 【发布时间】:2013-05-04 18:53:25 【问题描述】:

我正在寻找 GCC 和 类型。我知道两者都不是标准化的,但我在网上遇到过对它们的引用,我正在试图弄清楚:

    我需要为他们添加什么标题。 它们是跨平台的(至少在 Windows、Linux 和 Mac OSX 上),还是仅针对特定目标。 他们叫什么名字。 uint24_t, __uint24, __uint24_t?

【问题讨论】:

您可以在第 406 行找到 uint24_t here 的示例实现。 谢谢,当我用谷歌搜索并发现 GCC 引用了一个内置(非标准)扩展时,我的代码正在做类似的事情。希望我能找到更多关于它的信息。 =( 【参考方案1】:

标准 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);

对于 48 位也可以这样做,使用 uint64_t 作为基础。

【讨论】:

是的,我听说过这种方法,尽管它不那么令人愉快。但是我在 GCC 使用 __uint24 整数类型修补的各个地方谷歌提示(从未遇到过 48 位版本)。我不知道它们是非官方补丁还是仅针对特定的怪异架构。 @Jamin 你是对的——看起来 GCC 中为 AVR 架构提供了一个内置的 24 位类型。它似乎主要用于使用特殊指令进行地址操作,因为 AVR 是 8 位数据、24 位地址架构。但是如果你想要任何可移植的东西,你将不得不使用我发布的技术,或者通过使用运算符重载滚动你自己的类整数类。 谢谢,不幸的是,这就是我得出的结论。并不是说我反对推出自己的课程,而是对于小型原生数据类型,我只是觉得任何自制的解决方案都很笨拙。

以上是关于MinGW 中的 uint24_t 和 uint48_t的主要内容,如果未能解决你的问题,请参考以下文章

QT:断言:文件 C:\Qt\Qt5.14.2\5.14.2\mingw73_64\include/QtCore/qstring.h 中的“uint(i) < uint(size())”,第 1

windows 7 x64用cmake,mingw32安装LLVM,编译时报错MemoryBuffer.cpp:381:25: error

Arduino 在 uint32_t 和无符号字符之间转换

c中的严格别名和数组

从 Keil 中的 uint8_t 数组获取 uint16_t 值

c++文件的md5码