我使用以下代码来读取结构化二进制文件
FileInputStream objIS = new FileInputStream("/sdcard/waverider.usr");
DataInputStream objBR = new DataInputStream(objIS);
objwVer = objBR.readShort();
objwSVer = objBR.readShort();
objNoWaypoints = objBR.readShort();
System.out.println(objwVer);
System.out.println(objwSVer);
System.out.println(objNoWaypoints);
objIS.close();
这会产生结果: 512 0 8706
我追求的结果是 2 0 546
这是我使用VB.net获得的:
objwVer = objBR.ReadInt16
objwSVer = objBR.ReadInt16
objNoWaypoints = objBR.ReadInt16
二进制文件如下:
<00> 02 00 00 00 02 00 00 4b a9 c8 ff b2 2d 33 00 <00> 00 00 00 00 04 00 00 00 48 6f 6d 65 00 00 00 001c 68 53 0d 10 27 00 00 00 00 01 00 7e 8c c8 ff
我在这里遗漏了什么 9d 33 33 00 00 00 00 00 06 00 00 00
答案 0 :(得分:3)
你的问题是这样的 你的文件是用小端byte order编写的,但是你的代码期望大端字节顺序。
答案 1 :(得分:0)
您的流以little-endian编码,DataInputStream
仅支持big-endian。
您可以使用ByteBuffer代替,它允许解析little-endian格式化的流:http://developer.android.com/reference/java/nio/ByteOrder.html#LITTLE_ENDIAN
答案 2 :(得分:0)
尝试JBBP framework,它与Android兼容,其JBBPBitInputStream允许以不同的字节和位顺序读取数据
new JBBPBitInputStream(in).readInt(JBBPByteOrder.LITTLE_ENDIAN);