diff --git a/esp-knx-ip-conversion.cpp b/esp-knx-ip-conversion.cpp index 9dc2fd5..c260e05 100644 --- a/esp-knx-ip-conversion.cpp +++ b/esp-knx-ip-conversion.cpp @@ -83,5 +83,7 @@ uint32_t ESPKNXIP::data_to_4byte_uint(uint8_t *data) float ESPKNXIP::data_to_4byte_float(uint8_t *data) { - return (float)((data[1] << 24) | (data[2] << 16) | (data[3] << 8) |data[4]); -} \ No newline at end of file + union { float f; uint32_t i; } num; + num.i = (uint32_t)((data[1] << 24) | (data[2] << 16) | (data[3] << 8) | (data[4] << 0)); + return num.f; +} diff --git a/esp-knx-ip-send.cpp b/esp-knx-ip-send.cpp index e3e74ea..23e3c77 100644 --- a/esp-knx-ip-send.cpp +++ b/esp-knx-ip-send.cpp @@ -174,7 +174,13 @@ void ESPKNXIP::send_4byte_uint(address_t const &receiver, knx_command_type_t ct, void ESPKNXIP::send_4byte_float(address_t const &receiver, knx_command_type_t ct, float val) { - uint8_t buf[] = {0x00, ((uint8_t *)&val)[3], ((uint8_t *)&val)[2], ((uint8_t *)&val)[1], ((uint8_t *)&val)[0]}; + union { float f; uint32_t i; } num; + num.f = val; + uint8_t buf[] = {0x00, + (uint8_t)((num.i & 0xFF000000) >> 24), + (uint8_t)((num.i & 0x00FF0000) >> 16), + (uint8_t)((num.i & 0x0000FF00) >> 8), + (uint8_t)((num.i & 0x000000FF) >> 0)}; send(receiver, ct, 5, buf); }