Как определить 24-битный массив в C ++? - PullRequest
4 голосов
/ 08 августа 2010

Как определить 24-битный массив в C ++? (объявление переменной)

Ответы [ 6 ]

13 голосов
/ 08 августа 2010

В C ++ нет 24-битного типа переменной.

Вы можете использовать упакованную структуру:

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 и друзья нестандартны и используются просто для пояснения.

2 голосов
/ 08 августа 2010

Если вы собираетесь выполнять над ними побитовые операции, просто используйте целочисленный тип, имеющий не менее 24 бит.int составляет 32 бита на большинстве платформ, поэтому int может быть подходящим для этой цели.

РЕДАКТИРОВАТЬ: Поскольку вы действительно хотели массив из24-битные переменные, самый простой способ сделать это - создать массив из int s или long s (при условии, что это целочисленный тип данных, содержащий не менее 24 бит) и обрабатывать каждый элемент, как если бы он был24 бита.

2 голосов
/ 08 августа 2010

Беззнаковый байтовый массив из 3 байтов равен 24 битам. В зависимости от того, как вы планируете его использовать, это может сделать.

unsigned char arrayname[3]

Как отмечает @GMan, вы должны знать, что это не 100% всех систем , которые имеют 8-битные символы.

0 голосов
/ 08 августа 2010
std::vector<std::bitset<24> > myArray;
0 голосов
/ 08 августа 2010

Используйте bitset или bitvector , если они поддерживаются на вашей платформе.(Они :))

0 голосов
/ 08 августа 2010

В зависимости от вашей цели (например, если вы обеспокоены тем, что использование 32-битного типа может тратить слишком много памяти), вы можете также рассмотреть вопрос о создании массива байтов с трехкратной длиной.

Я использовалсделать это много для хранения изображений RGB.Чтобы получить доступ к n-му элементу, вам нужно умножить на три, а затем добавить ноль, один или два в зависимости от того, какой «канал» из элемента вы хотите.Конечно, если вы хотите получить доступ ко всем 24 битам как одно целое число, этот подход требует некоторой дополнительной арифметики.

Так просто unsigned char myArray[ELEMENTS * 3];, где ELEMENTS - это количество требуемых 24-битных элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...