реклама на сайте
подробности

 
 
> Преобразование структуры в массив и обратно, как это сделать?
smk
сообщение Dec 10 2011, 07:58
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Есть функция для подсчета CRC. Она работает с массивом. Мне же нужно чтобы она считала CRC структуры. Правильней будет сказать, что в пакете 16 байт, последний из них и есть CRC. Его нужно считать перед отправкой пакета и проверять при получении.
Функция:
Код
unsigned char Crc8(unsigned char *buf, unsigned char len)
{
unsigned char crc = 0xFF;
while (len--) crc = Crc8Table[crc ^ *buf++];
return crc;
}


Структура:
Код
struct dataexchange_t      
{
   uchar b1;        
   uchar b2;        
   uchar b3;        
   uchar b4;        
   uchar b5;        
   uchar b6;
   uchar b7;
   uchar b8;
   uchar b9;
   uchar b10;
   uchar b11;
   uchar b12;
   uchar b13;
   uchar b14;
   uchar b15;
   uchar b16;
};


Как проще преобразовать структуру в массив (с ним удобней) ?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GetSmart
сообщение Dec 10 2011, 08:42
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Воспользуйтесь юнионом (union). Первое поле будет структурой с любой структурой sm.gif А второе поле будет массивом, который будет нах-ся прямо поверх структуры на этих же адресах. Длины обоих переменных могут совпадать, а могут и отличаться. Общий размер будет равен максимальному.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
dxp
сообщение Dec 10 2011, 14:14
Сообщение #3


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(GetSmart @ Dec 10 2011, 15:42) *
Воспользуйтесь юнионом (union).

Только такой подход таит неприятности из-за паддинга на платформах, где есть выравнивание. Чтобы не налетать на подводные грабли, надо в структуре руками вставлять пустые поля и инициализировать их определёнными значениями, чтобы физический sizeof структуры был равен sizeof массива. Либо использовать пакованные структуры, но это непереносимость и оверхед по производительности в размеру кода.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th June 2025 - 12:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01352 секунд с 7
ELECTRONIX ©2004-2016