Объединить два 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}
Однако это вообще не работает. Ошибки конструктора/деструктора/типа…
Есть полезные идеи, как это сделать?
@Nikolaij, 👍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
- Ошибка: invalid application of 'sizeof' to incomplete type 'int []' при попытке вычислить размер массива в библиотеке
- Объявление и использование массива структур в Arduino
- Поддерживает ли Arduino C++ динамические массивы объектов ?
- Почему структура переменного размера не компилируется в Arduino IDE?
- Получена ошибка недопустимого преобразования из 'const char*' в 'const uint8_t*
- Как масштабировать растровое изображение (массив uint8_t) в Arduino?
- Удалить все элементы из массива
- Как я могу присвоить значение массива символов массиву uint8_t?
Если вы получаете ошибки, пожалуйста, включите их в свой вопрос. Обычно они очень помогают, @chrisl