Попробуйте скопировать номер uint8_t в массив uint8_t с помощью memcpy

Я пытаюсь использовать memcpy() для копирования uint8_t в массив uint8_t[], но это не работает. Вот что я пробовал:

uint8_t mess[16];
uint8_t my_number = 1;
memcpy(mess, &my_number, sizeof(my_number)); 

Когда я печатаю свой mess, у меня ничего нет.

Вы устанавливаете только один элемент массива. Чтобы вывести его значение, используйте как минимум спецификатор преобразования %d. или %hhu

Vlad from Moscow 09.02.2023 10:42

Как вы печатаете mess? Код выглядит хорошо для меня

Pablo 09.02.2023 10:43

@Pablo Я использую SerialUSB.println(char *)mess) Я на Arduino с samd21

simon 09.02.2023 10:44

Это эквивалентно mess[0] = my_number;. Это тот эффект, которого вы ожидаете? Или вы ищете memset?

Oka 09.02.2023 10:44

Я изменил теги для вас на что-то более подходящее.

Fe2O3 09.02.2023 10:48

@simon Я не знаю, что ожидает SerialUSB.println, но мне кажется, что он ожидает строку, заканчивающуюся \0. Ваш код этого не делает, mess не завершается \0. Если это так, то вы вызываете UB.

Pablo 09.02.2023 10:49
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
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');

Другие вопросы по теме