我如何在c ++中定义24位数组?

时间:2010-08-08 09:02:15

标签: c++ bit-manipulation

如何在c ++中定义24位数组? (变量声明)

6 个答案:

答案 0 :(得分:13)

C ++中没有24位变量类型。

您可以使用bitpacked结构:

struct ThreeBytes {
    uint32_t value:24;
};

但不能保证sizeof ThreeBytes == 3

您也可以使用uint32_tsint32_t,具体取决于您的需求。

另一种选择是使用std::bitset

typedef std::bitset<24> ThreeBytes;

然后制作一个数组:

ThreeBytes *myArray = new ThreeBytes[10];

当然,如果你真的需要“三个字节”,你可以创建一个数组数组:

typedef uint8_t ThreeBytes[3];

请注意,uint8_t和朋友都是非标准用户,仅用于澄清。

答案 1 :(得分:2)

3字节的无符号字节数组是24位。根据您计划如何使用它,它可以做到。

unsigned char arrayname[3]

正如@GMan所指出的,你应该知道it's not 100% of all systems有8位字符。

答案 2 :(得分:2)

如果要对它们执行按位运算,则只需使用至少为24位的整数类型。大多数平台上int为32位,因此int可能适用于此目的。

编辑:由于您实际上需要24位变量的数组,因此最直接的方法是创建int的数组或long s(只要它是包含至少24位的整数数据类型)并将每个元素视为24位。

答案 3 :(得分:0)

根据您的目的(例如,如果您担心使用32位类型可能会浪费太多内存),您可能还会考虑创建一个长度为三倍的字节数组。

我曾经为存储RGB图像做了很多。要访问第n个元素,您必须乘以3然后添加零,一个或两个,具体取决于您想要的元素中的“通道”。当然,如果你想要将所有24位作为一个整数访问,这种方法需要一些额外的算术。

所以简单地unsigned char myArray[ELEMENTS * 3];,其中ELEMENTS是你想要的24位元素的数量。

答案 4 :(得分:0)

如果您的平台支持bitsetbitvector,请使用它们。 (他们是:))

答案 5 :(得分:0)

std::vector<std::bitset<24> > myArray;