Fix 24 bit signed integer parsing in sml parser (#5250)

This commit is contained in:
mulder-fbi 2023-08-16 00:52:56 +02:00 committed by GitHub
parent b9e9223fdd
commit 6089526975
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -88,6 +88,11 @@ uint64_t bytes_to_uint(const bytes &buffer) {
for (auto const value : buffer) { for (auto const value : buffer) {
val = (val << 8) + value; val = (val << 8) + value;
} }
// Some smart meters send 24 bit signed integers. Sign extend to 64 bit if the
// 24 bit value is negative.
if (buffer.size() == 3 && buffer[0] & 0x80) {
val |= 0xFFFFFFFFFF000000;
}
return val; return val;
} }