Вопрос по структурам

Yuki007
Offline
Зарегистрирован: 30.01.2014

Всем здравствуйте.

Возникла нужда "разбирать по полочкам" символьный массив в 32 байта, для удобства сортировки и обращения было решено создать структуру и за счет нее сортировать данные.

Реализованна задача так, что имеется массив "буффер" в который поступает 32 байта, он копируется в структуру состоящую из char-ов и массивов. Это работает, структура заполняется. После чего в структуре эти данные легко менять и обрабатывать. Но что бы эти данные переслать мне нужно скопировать их из структуры обратно в массив "буффер" и сделать это красиво с помощью memcpy у меня не получается.
Может кто подскажет в чем ошибка, инфы по такому построению вопроса в учебниках не нашел.

char buff[32];

struct data

{
  char s = '$';
  char id[8];
  char data[21]
};
data data_s;

void()
{
   memcpy(&data_s, buff, 9);  //работает
   memcpy(&buff, data, 9);  //не работает
}
 
qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
/**/
//--------------------------------
struct stData {
  char s = '$';
  char id[8];
  char data[21];
};
void save(char *to, char *from) {
  unsigned int len = strlen(from);
  strncpy(to, from, len + 1);
}
//---Компоновка-----------------------------
stData AAA;
//---main-----------------------------
int main() {
  init();
  //setup()
  Serial.begin(9600);
  save(AAA.id , "12345");
  save(AAA.data, "ThisIsData");
  Serial.println(AAA.id );
  Serial.println(AAA.data);
  for (;;) {
    //loop()
  }
  return 0;
}
/*Скетч использует 1490 байт (4%) памяти устройства. Всего доступно 30720 байт.
  Глобальные переменные используют 232 байт (11%) динамической памяти, оставляя 1816 байт для локальных переменных. Максимум: 2048 байт.
*/

ПС: Вместо save() можно это strcpy()

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Используй union, Luke.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Yuki007 пишет:

char buff[32];


void()
{
   memcpy(&data_s, buff, 9);  //работает
   memcpy(&buff, data, 9);  //не работает
}
 
Выражайтесь яснее. Он у Вас не то что не работает - он не компилияруется. напишите
 
memcpy(buff, & data_s, 9);