diff --git a/src/lib/ebus/data.cpp b/src/lib/ebus/data.cpp index fbd17c48..aa5f390c 100644 --- a/src/lib/ebus/data.cpp +++ b/src/lib/ebus/data.cpp @@ -1119,6 +1119,8 @@ result_t NumberDataField::readSymbols(SymbolString& input, const unsigned char b # if HAVE_DIRECT_FLOAT_FORMAT == 2 value = __builtin_bswap32(value); # endif + unsigned char* pval = (unsigned char*)&value; + val = *((float*)pval); #else int exp = (value >> 23) & 0xff; // 8 bits, signed if (exp == 0) { @@ -1130,15 +1132,15 @@ result_t NumberDataField::readSymbols(SymbolString& input, const unsigned char b if (negative) { val = -val; } + } +#endif + if (val != 0.0) { if (m_divisor < 0) { val *= (float)-m_divisor; } else if (m_divisor > 1) { val /= (float)m_divisor; } } -#endif - unsigned char* pval = (unsigned char*)&value; - val = *((float*)pval); if (m_precision != 0) output << fixed << setprecision(m_precision+6); else if (val == 0) @@ -1201,6 +1203,10 @@ result_t NumberDataField::writeSymbols(istringstream& input, if (strEnd == NULL || strEnd == str || *strEnd != 0) { return RESULT_ERR_INVALID_NUM; // invalid value } + if (m_divisor < 0) + dvalue /= -m_divisor; + else if (m_divisor > 1) + dvalue *= m_divisor; #ifdef HAVE_DIRECT_FLOAT_FORMAT float val = (float)dvalue; unsigned char* pval = (unsigned char*)&val; diff --git a/src/lib/ebus/test/test_data.cpp b/src/lib/ebus/test/test_data.cpp index dea37c40..f98f897f 100644 --- a/src/lib/ebus/test/test_data.cpp +++ b/src/lib/ebus/test/test_data.cpp @@ -286,6 +286,15 @@ int main() {"x,,exp", "-0.001", "10feffff046f1283ba", "00", ""}, {"x,,exp", "-", "10feffff040000807f", "00", ""}, {"x,,exp","-32.767", "10feffff04681103c2", "00", ""}, + {"x,,exp,1000", "-0.000090000", "10feffff04ec51b8bd", "00", ""}, + {"x,,exp,-100", "-9", "10feffff04ec51b8bd", "00", ""}, + {"x,,exr", "-0.09", "10feffff04bdb851ec", "00", ""}, + {"x,,exr", "0.0", "10feffff0400000000", "00", ""}, + {"x,,exr", "-0.001", "10feffff04ba83126f", "00", ""}, + {"x,,exr", "-", "10feffff047f800000", "00", ""}, + {"x,,exr","-32.767", "10feffff04c2031168", "00", ""}, + {"x,,exr,1000", "-0.000090000", "10feffff04bdb851ec", "00", ""}, + {"x,,exr,-100", "-9", "10feffff04bdb851ec", "00", ""}, {"x,,d2b", "18.004", "10fe0700090112", "00", ""}, {"x,,d2b", "0.000", "10feffff020000", "00", ""}, {"x,,d2b", "-0.004", "10feffff02ffff", "00", ""},