2013-06-04 2 views
0

Я столкнулся с ошибкой, связанной с typecasting в C. У меня есть структура, которая держит значение float, называемое unioffs, и мне нужно принять это значение float в буфер. Для этого я использую функцию memcopy. Следующее - это то, что я реализовал.Ошибка Typecast в C

typedef struct __attribute__ ((aligned (1), packed)) 
{ 
/*01 Bytes*/  uint8_t flags; 
/*01 Bytes*/  uint8_t store;    
/*04 Bytes*/  float unioffs;   /* detector offset in univalues default=0 */ 
/*04 Bytes*/  float scale;   /* detector scale - default =1 */ 
/*04 Bytes*/  float valalrm;   /* value alarm level - in univalue*/ 
/*04 Bytes*/  float dosalrm;   /* dose alarm level - in unidose*/ 
/*04 Bytes*/  float samperc;   /* percentage of the output sampled */ 
/*04 Bytes*/  float dcstime;   /* time of the exposure in seconds */ 
/*03 Bytes*/  int8_t fillup[3];  /* !!!! allways fill up to 29 bytes */ 

} DET_STUP;  


int main() 
{ 
    DET_STUP det_stup[DET_NROFCHAN]; //NROFCHAN is #defined is 10 
    uint8_t response_to_LV[42]; 
    memset(response_to_LV,0,42); 
    memset(guc_sensor_config_data,0,40); 

    //guc_sensor_config_data is a global buffer of 40 bytes 
    memcpy(guc_sensor_config_data+1*14,(float*)det_stup.unioffs,4); 

    //Further implementaions to send the buffer through UART 

} 

Ошибка, что я получаю здесь: Ошибка # 171: неверный тип преобразования

Что я делаю неправильно?

+0

Можете ли вы предоставить полный компилируемый пример, пожалуйста? Включая определения для 'DET_STUP',' DET_NROFCHAN', 'guc_sensor_config_data' и' LEFT_CH' – simonc

+0

Какой тип 'det_stup [LEFT_CH] .unioffs'? С изменением на 'det_stup.unioffs' вы получите« запрашивающий элемент в чем-то не структурированном или объединенном »или подобном. –

+0

det_stup.unioffs - это float –

ответ

0

Вам нужен адрес (&) в unioffs поле, и вам необходимо обеспечить индекс DET_STUP в массиве:

memcpy(guc_sensor_config_data+1*14, &det_stup[i].unioffs,4); 
+0

Lindback: Я понимаю намерения в использовании оператора «&». Но зачем нужен индекс массива? Что такое «я» здесь? –

+1

Проверьте свою декларацию. Что это такое, массив длиной 0? 'DET_STUP det_stup [DET_NROFCHAN]; // NROFCHAN is #defined is 0' –

+0

My Bad, его 10. Извините Sir –

0

я думаю (с плавающей точкой *) должно быть (символ *) или использовать адрес det_stup.unioffs

+0

(char *) сгенерировал такую ​​же ошибку –

+0

(float *) & det_stup.unioffs не дает никаких ошибок/проблем. но так ли? –