diff --git a/android_app/app/src/main/java/com/health/openscale/core/utils/Converters.java b/android_app/app/src/main/java/com/health/openscale/core/utils/Converters.java index 1d2daf43..1b2a4ce8 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/utils/Converters.java +++ b/android_app/app/src/main/java/com/health/openscale/core/utils/Converters.java @@ -123,4 +123,10 @@ public class Converters { } return kg; } + + public static int parseUnsignedInt16Be(byte[] data, int offset) { + int value = (data[offset] & 0xFF) << 8; + value += data[offset + 1] & 0xFF; + return value; + } } diff --git a/android_app/app/src/test/java/com/health/openscale/ConvertersTest.java b/android_app/app/src/test/java/com/health/openscale/ConvertersTest.java index 715081e1..37b13f00 100644 --- a/android_app/app/src/test/java/com/health/openscale/ConvertersTest.java +++ b/android_app/app/src/test/java/com/health/openscale/ConvertersTest.java @@ -79,4 +79,13 @@ public class ConvertersTest { Converters.toKilogram(Converters.fromKilogram(10.0f, unit), unit)); } } + + @Test + public void unsignedIntConverters() throws Exception { + byte[] data = new byte[]{(byte) 0xfd, (byte) 0xfe, (byte) 0xfc, (byte) 0x10, (byte) 0x7f}; + assertEquals(0xfdfe, Converters.parseUnsignedInt16Be(data, 0)); + assertEquals(0xfefc, Converters.parseUnsignedInt16Be(data, 1)); + assertEquals(0xfc10, Converters.parseUnsignedInt16Be(data, 2)); + assertEquals(0x107f, Converters.parseUnsignedInt16Be(data, 3)); + } }