如何在c ++中定义24位数组? (变量声明)
答案 0 :(得分:13)
C ++中没有24位变量类型。
您可以使用bitpacked结构:
struct ThreeBytes {
uint32_t value:24;
};
但不能保证sizeof ThreeBytes == 3
。
您也可以使用uint32_t
或sint32_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)
答案 5 :(得分:0)
std::vector<std::bitset<24> > myArray;