C++ MinGW中的uint24和uint48

C++ MinGW中的uint24和uint48,c++,gcc,mingw,C++,Gcc,Mingw,我正在GCC和MinGW中寻找uint24和uint48类型。我知道两者都不是标准化的,但我在网上遇到过对它们的引用,我试图弄清楚: 我需要为他们包括什么标题 无论是跨平台(至少在Windows、Linux和Mac OSX上),还是仅针对特定目标 他们的名字是什么。你要什么 标准uintXX_t类型在stdint.h(C,C++98)或cstdint(C++11)中提供 在8位数据、24位地址的AVR体系结构上,GCC提供内置的24位整数,但它不可移植。有关它的更多信息,请参阅 GCC或MinG

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

  • 我需要为他们包括什么标题
  • 无论是跨平台(至少在Windows、Linux和Mac OSX上),还是仅针对特定目标
  • 他们的名字是什么。你要什么

  • 标准uintXX_t类型在stdint.h(C,C++98)或cstdint(C++11)中提供

    在8位数据、24位地址的AVR体系结构上,GCC提供内置的24位整数,但它不可移植。有关它的更多信息,请参阅

    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作为基础。

    您可以在第406行附近找到
    uint24_t
    的示例实现。谢谢,我的代码也做了类似的事情,当我在谷歌上搜索到GCC对内置(非标准)扩展的引用时。希望我能找到更多关于它的信息=(是的,我听说过这种方法,尽管它不那么令人愉快。但我在谷歌上搜索了一些地方的提示,在这些地方,GCC使用了24个整数类型(从未遇到过48位版本)。我不知道它们是非官方补丁还是只针对特定的怪异体系结构。@Jamin你说得对——GCC中似乎为AVR体系结构提供了内置的24位类型。它似乎主要用于使用特殊指令进行地址操作,因为AVR是一种8位数据、24位地址体系结构。But如果你想要任何可移植的东西,你必须使用我发布的技术,或者通过使用运算符重载滚动你自己的类整数。谢谢,这是我得出的不幸结论。不是说我反对滚动我自己的类,而是对于小型本机数据类型,我觉得任何自制的解决方案都是cl乌基。