Я пытаюсь использовать memcpy() для копирования uint8_t в массив uint8_t[], но это не работает. Вот что я пробовал:
uint8_t mess[16];
uint8_t my_number = 1;
memcpy(mess, &my_number, sizeof(my_number));
Когда я печатаю свой mess, у меня ничего нет.
Как вы печатаете mess? Код выглядит хорошо для меня
@Pablo Я использую SerialUSB.println(char *)mess) Я на Arduino с samd21
Это эквивалентно mess[0] = my_number;. Это тот эффект, которого вы ожидаете? Или вы ищете memset?
Я изменил теги для вас на что-то более подходящее.
@simon Я не знаю, что ожидает SerialUSB.println, но мне кажется, что он ожидает строку, заканчивающуюся \0. Ваш код этого не делает, mess не завершается \0. Если это так, то вы вызываете UB.





SerialUSB.println(char *)mess)
SerialUSB.println требуется строка с завершающим нулем, но приведенное ниже не инициализирует массив, поэтому значения в массиве неопределенны:
uint8_t mess[16];
Чтение неопределенных значений делает поведение программы неопределенным, поэтому инициализируйте ее:
uint8_t mess[16]{}; // now initialized with 0:s
Далее, memcpy здесь не нужен:
uint8_t my_number = 1;
memcpy(mess, &my_number, sizeof(my_number));
Это то же самое, что
mess[0] = my_number;
И маловероятно, что вам действительно нужен символ со значением 1 при использовании println, поскольку это «невидимый» символ (по крайней мере, в ASCII), но вместо этого вам нужен символ '1':
mess[0] = static_cast<uint8_t>('1');
Вы устанавливаете только один элемент массива. Чтобы вывести его значение, используйте как минимум спецификатор преобразования %d. или %hhu