diff --git a/java_console/inifile/src/com/opensr5/ini/field/EnumIniField.java b/java_console/inifile/src/com/opensr5/ini/field/EnumIniField.java index 2e8f31988e..4909a6bb94 100644 --- a/java_console/inifile/src/com/opensr5/ini/field/EnumIniField.java +++ b/java_console/inifile/src/com/opensr5/ini/field/EnumIniField.java @@ -48,7 +48,7 @@ public class EnumIniField extends IniField { public static int getBitRange(int ordinal, int bitPosition, int bitSize) { ordinal = ordinal >> bitPosition; - ordinal = ordinal & (1 << bitSize); + ordinal = ordinal & ((1 << (bitSize + 1)) - 1); return ordinal; } diff --git a/java_console/inifile/src/com/opensr5/ini/test/IniFileReaderTest.java b/java_console/inifile/src/com/opensr5/ini/test/IniFileReaderTest.java index 8ad7b52f9a..9fd769537e 100644 --- a/java_console/inifile/src/com/opensr5/ini/test/IniFileReaderTest.java +++ b/java_console/inifile/src/com/opensr5/ini/test/IniFileReaderTest.java @@ -103,6 +103,11 @@ public class IniFileReaderTest { @Test public void testBitLogic() { + assertEquals(4, EnumIniField.getBitRange(4, 0, 7)); + assertEquals(4, EnumIniField.getBitRange(4, 0, 2)); + assertEquals(0, EnumIniField.getBitRange(4, 0, 1)); + assertEquals(3, EnumIniField.getBitRange(7, 0, 1)); + assertEquals(1, EnumIniField.getBitRange(0xff, 0, 0)); assertEquals(1, EnumIniField.getBitRange(0xf0, 4, 0));