Объединение векторных элементов в одно 32-битное слово - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь объединить вектор из четырех элементов в 4-байтовое слово для представления в виде uint32_t.

Извините, у меня нет своего кода, но я пытаюсь это сделать:

vector v;// каждый элемент является байтом, с четырьмя элементами v [0], v [1], v [2], v [3] объединяют эти четыре элемента, чтобы сформировать слово (я думаю, char [32]?) [0] [1] [2] [3] для использования в качестве uint32_t.

Я пытался заменить v [0,1,2,3] на строки, затем добавить строки с помощью циклов, но по какой-то причине в результате были добавлены ошибочные биты.

Большое спасибо за помощь всем!

1 Ответ

1 голос
/ 10 июля 2019

Что вам нужно, это битовое смещение и по битам ИЛИ , например:

std::vector<uint8_t> v;
// fill v with 4 bytes as needed...
uint32_t i = (uint32_t(v[X1]) << 24) | (uint32_t(v[X2]) << 16) | (uint32_t(v[X3]) << 8) | uint32_t(v[X4]);

Где X1..X4 - нужные байтовые индексы в векторе, в зависимости от того, какой порядковый номер вы хотите использовать для uint32_t.

В качестве альтернативы, если векторные элементы уже находятся в правильном порядке байтов для порядкового номера, в котором вы хотите указать uint32_t, вы можете просто memcpy() байты как есть:

std::vector<uint8_t> v;
// fill v with 4 bytes as needed...
uint32_t i;
std::memcpy(&i, v.data(), 4);
...