我有一个需要32位浮点的函数,但是在某种模式下,它希望浮点实际上只是4个UINT8s打包在一起。
我写的代码可以工作,但是我得到一个编译器警告“非法指针”警告,我想知道什么是最“正确”的方法来做它代码可读性也很重要,我认为我写的东西很容易阅读,尽管可能有一些方法可以用更少的行来写。

UINT8 time[6];
FLOAT FSTtime = 0;    //32bit float
UINT8 * FSTtimePointer;

//Get the current time as 6 bytes {secs,mins,hours,day,month,year}
returnSize = appP->DB_get_param_value(12, 0, 8, &time);
if (returnSize < 6) return;

(UINT8*)FSTtimePointer = &FSTtime;   //Line 876

//Pack 4 bytes of time data into a "float"
FSTtimePointer [0] = time[3];  //Reverse month & day because americans are backwards
FSTtimePointer [1] = time[4];
FSTtimePointer [2] = time[2];
FSTtimePointer [3] = time[1];

appP->HIST_write_FST_log(SubMin_CFG.OFFSET, (UINT16)historyPointer, FSTtime);

HIST_write_FST_日志的原型是
  void   (*HIST_write_FST_log) (UINT8 hist_pt_index, UINT16 log_index, FLOAT value);

我得到的编译器警告是:
876: C1000 (W) Illegal pointer assignment
876: C1024 (W) First operand of "=" is not lvalue

如果有人感兴趣,我使用的编译器是日立处理器的Renesas H8。

最佳答案

您可以使用以下方法修改代码
FSTtimePointer=(UINT8*)&FSTtime;

07-26 04:27