diff --git a/src/zutil/parser/binary/BinaryFieldData.java b/src/zutil/parser/binary/BinaryFieldData.java index 2a7949d..e9b82f4 100755 --- a/src/zutil/parser/binary/BinaryFieldData.java +++ b/src/zutil/parser/binary/BinaryFieldData.java @@ -95,9 +95,11 @@ public class BinaryFieldData { try { field.setAccessible(true); if (field.getType() == Boolean.class || field.getType() == boolean.class) - field.set(obj, data[0] != 0); + field.setBoolean(obj, data[0] != 0); + else if (field.getType() == Byte.class || field.getType() == byte.class) + field.setByte(obj, data[0]); else if (field.getType() == Integer.class || field.getType() == int.class) - field.set(obj, Converter.toInt(data)); + field.setInt(obj, Converter.toInt(data)); else if (field.getType() == String.class) field.set(obj, new String(ByteUtil.getReverseByteOrder(data), StandardCharsets.ISO_8859_1)); else @@ -122,6 +124,10 @@ public class BinaryFieldData { return ByteUtil.getBits( new byte[]{ (byte)(field.getBoolean(obj) ? 0x01 : 0x00)}, getBitLength(obj)); + else if (field.getType() == Byte.class || field.getType() == byte.class) + return ByteUtil.getBits( + new byte[]{field.getByte(obj)}, + getBitLength(obj)); else if (field.getType() == Integer.class || field.getType() == int.class) return ByteUtil.getBits( Converter.toBytes(field.getInt(obj)), diff --git a/test/zutil/parser/binary/BinaryStructInputStreamTest.java b/test/zutil/parser/binary/BinaryStructInputStreamTest.java index c0fe759..bbf69c1 100755 --- a/test/zutil/parser/binary/BinaryStructInputStreamTest.java +++ b/test/zutil/parser/binary/BinaryStructInputStreamTest.java @@ -93,6 +93,27 @@ public class BinaryStructInputStreamTest { struct.assertObj(); } + @Test + public void basicByteTest(){ + BinaryTestStruct struct = new BinaryTestStruct() { + @BinaryField(index=1, length=1) + public byte b1; + @BinaryField(index=2, length=4) + public byte b2; + @BinaryField(index=3, length=3) + public byte b3; + + public void assertObj(){ + assertEquals(0, b1); + assertEquals(6, b2); + assertEquals(6, b3); + } + }; + + BinaryStructInputStream.read(struct, new byte[]{0b0011_0110}); + struct.assertObj(); + } + @Test public void nonLinedLength(){ BinaryTestStruct struct = new BinaryTestStruct() { diff --git a/test/zutil/parser/binary/BinaryStructOutputStreamTest.java b/test/zutil/parser/binary/BinaryStructOutputStreamTest.java index c267bac..4b2c70d 100755 --- a/test/zutil/parser/binary/BinaryStructOutputStreamTest.java +++ b/test/zutil/parser/binary/BinaryStructOutputStreamTest.java @@ -38,6 +38,32 @@ import static org.junit.Assert.assertArrayEquals; */ public class BinaryStructOutputStreamTest { + @Test + public void basicBooleanTest() throws IOException { + BinaryStruct struct = new BinaryStruct() { + @BinaryField(index=1, length=1) + public boolean b1 = false; + @BinaryField(index=2, length=1) + public boolean b2 = true; + }; + + byte[] data = BinaryStructOutputStream.serialize(struct); + assertArrayEquals(new byte[]{(byte)0b0100_0000}, data); + } + + @Test + public void basicByteTest() throws IOException { + BinaryStruct struct = new BinaryStruct() { + @BinaryField(index=1, length=3) + public byte b1 = 3; + @BinaryField(index=2, length=5) + public byte b2 = Byte.MAX_VALUE; + }; + + byte[] data = BinaryStructOutputStream.serialize(struct); + assertArrayEquals(new byte[]{(byte)0b0111_1111}, data); + } + @Test public void basicIntTest() throws IOException { BinaryStruct struct = new BinaryStruct() { @@ -64,20 +90,6 @@ public class BinaryStructOutputStreamTest { assertArrayEquals(new byte[]{0,1, 0,2}, data); } - - @Test - public void basicBooleanTest() throws IOException { - BinaryStruct struct = new BinaryStruct() { - @BinaryField(index=1, length=1) - public boolean b1 = false; - @BinaryField(index=2, length=1) - public boolean b2 = true; - }; - - byte[] data = BinaryStructOutputStream.serialize(struct); - assertArrayEquals(new byte[]{(byte)0b0100_0000}, data); - } - @Test public void basicStringTest() throws IOException { BinaryStruct struct = new BinaryStruct() {