Я хочу преобразовать сообщение CAN (4 байта) в значение с плавающей запятой.
Я читаю значение с текущего датчика и конвертирую в 4 байта, отправляю их с помощью CAN Shield в Vector CANoe. В программе Arduino преобразование значения с плавающей запятой в байты и обратно возможно с помощью Unions. В CAPL я не могу использовать союзы и указатели.
Код Arduino:
unsigned char arr[4] = {0,0,0,0};
typedef union
{
float number;
uint8_t bytes[4];
} floatunion;
floatunion myFloat;
myFloat.number = lowAmps; // Assign a converted current value to the float
lowRawValue = AvgSnsrData[0]; //Input Sensor Data
lowVoltage = (lowRawValue / 1024.0) * 5000; // Gets you mV
lowAmps = ((lowVoltage - ACoffset) / mVperAmp);
for (int i=0; i<4; i++)
{
Serial.print(myFloat.bytes[i], HEX); // Print the hex representation of the float
Serial.print(' ');
arr[i] = myFloat.bytes[i]; //Save in unsigned char array
}
I've tried a few from web(https://stackoverflow.com/questions/52590435/capl-converting-4-raw-bytes-into-floating-point) but nothing works well.
Также пробовал:
float test = (myFloat.bytes[3]<<24|myFloat.bytes[2]<<16|myFloat.bytes[1]<<8|myFloat.bytes[0]<<0);
Есть ли способ преобразовать это без использования объединения или указателя в CAPL / C? Есть ли встроенная функция в CAPL?
Заранее спасибо.
memcpy
? - person Retired Ninja   schedule 10.01.2020