Объединить два 8-битных массива в один 16-битный массив

Я абсолютный новичок в Arduino и C++ и пытаюсь пройти несколько руководств, чтобы получить минимальное представление. Однако я застрял уже на некоторых крошечных точках. Что я хочу сделать? Объединить два 8-битных целочисленных массива в один 16-битный массив:

int summand_one[8] = {0,0,0,1,1,0,0,0};
int summand_two[8] = {1,0,0,0,0,0,0,1};

int * summand = new int[16];
std::copy(summand_one, summand_one+8, summand);
std::copy(summand_two, summand_two+8, summand+8);

Результат должен быть

{0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1}

Однако это вообще не работает. Ошибки конструктора/деструктора/типа…

Есть полезные идеи, как это сделать?

, 👍1

Обсуждение

Если вы получаете ошибки, пожалуйста, включите их в свой вопрос. Обычно они очень помогают, @chrisl


1 ответ


Лучший ответ:

1

Лучше избегать динамического выделения памяти на Arduino, где всего 2 КБ памяти SRAM.

Обратите внимание, что ваши массивы стоят 2 (байт/целое число) * (8 + 8 + 16) = 64 байта. И кажется, что вы храните только логические значения, которые можно хранить в одном бите. Так что рассмотрите другой вариант (я не буду его рассматривать, так как, возможно, потребление памяти не является проблемой).

Однако простым решением является использование uint8_t.

Кроме того, я бы использовал простой memcpy. Очень наивно это выглядело бы так:

uint8_t summand_one[8];
uint8_t summand_two[8];
uint8_t summand[16];

void setup()
{
}

void loop()  
{ 
  memcpy(summand, summand_one, 8);
  memcpy(summand + 8, summand_two, 8);
}

Используя некоторые константы для размеров, вы получаете более гибкий/читабельный и удобный код:

static const uint8_t SummandOneSize = 8;
static const uint8_t SummandTwoSize = 8;

uint8_t summand_one   [SummandOneSize];
uint8_t summand_two   [SummandTwoSize];
uint8_t summand_merged[SummandOneSize + SummandTwoSize];

void setup()
{
}

void loop()  
{ 
  memcpy(summand_merged                 , summand_one, SummandOneSize);
  memcpy(summand_merged + SummandOneSize, summand_two, SummandTwoSize);
}
,

Спасибо, так получилось. Также спасибо за дополнительное объяснение динамического распределения памяти!, @Nikolaij

Пожалуйста., @Michel Keijzers