File tree Expand file tree Collapse file tree 1 file changed +10
-3
lines changed Expand file tree Collapse file tree 1 file changed +10
-3
lines changed Original file line number Diff line number Diff line change @@ -355,23 +355,30 @@ float zcbor_float16_to_32(uint16_t input)
355
355
: (expo + (F32_BIAS - F16_BIAS ));
356
356
uint32_t value32 = (sign << F32_SIGN_OFFS ) | (new_expo << F32_EXPO_OFFS )
357
357
| (mantissa << (F32_EXPO_OFFS - F16_EXPO_OFFS ));
358
- return * (float * )& value32 ;
358
+ float result ;
359
+
360
+ memcpy (& result , & value32 , sizeof (result ));
361
+ return result ;
359
362
}
360
363
}
361
364
362
365
363
366
uint16_t zcbor_float32_to_16 (float input )
364
367
{
365
- uint32_t value32 = * (uint32_t * )& input ;
368
+ uint32_t value32 ;
369
+
370
+ memcpy (& value32 , & input , sizeof (value32 ));
366
371
367
372
uint32_t sign = value32 >> F32_SIGN_OFFS ;
368
373
uint32_t expo = (value32 >> F32_EXPO_OFFS ) & F32_EXPO_MSK ;
369
374
uint32_t mantissa = value32 & F32_MANTISSA_MSK ;
370
375
371
376
uint16_t value16 = (uint16_t )(sign << F16_SIGN_OFFS );
372
377
378
+ uint32_t abs_value32 = value32 & ~(1 << F32_SIGN_OFFS );
373
379
float abs_input ;
374
- * (uint32_t * )& abs_input = value32 & ~(1 << F32_SIGN_OFFS );
380
+
381
+ memcpy (& abs_input , & abs_value32 , sizeof (abs_input ));
375
382
376
383
if (abs_input <= (F16_MIN / 2 )) {
377
384
/* 0 or too small for float16. Round down to 0. value16 is already correct. */
You can’t perform that action at this time.
0 commit comments