我有無符號短褲的二進制文件。我需要將這個字節的無符號值轉換爲JAVA中的原始短語。字節順序是Little Endian。我想以這樣的方式從二進制文件轉換2個字節(無符號短)到Java短
byte[] bytes = new byte[frameLength];
for(int i = 0; i < fh.nFrames; i++) {
raf.readFully(bytes);
for(int j = 2; j < frameLength/2; j++) {
short s;
s = (short) (bytes[2*j + 1] << 8 | bytes[2 * j]);
System.out.println(s);
System.out.println(Integer.toBinaryString(s));
}
}
例子: 情況1(OK): 無符號短:8237 十六進制(小端):2D 20 二進制(大端):0010 0000 0010 1101 和System.out.println(Integer.toBinaryString(s))給我們 10000000101101.這是正確的。
殼體2(不正常) 無符號短:384 以十六進制(小端):80 01 二進制(大端):0000 0001 1000 0000 和的System.out.println(Integer.toBinaryString(S ))給我們 11111111111111111111111110000000. System.out.println(s)給我們-128。這是不正確的。 我如何從中獲得384的價值?
有人知道爲什麼它不起作用嗎?
這是正確的。簽名擴展。字節是用Java簽名的。 – EJP
好吧,但我怎麼能得到這個384? – santiag
[[DataInputStream#readUnsignedShort'](https://docs.oracle.com/javase/8/docs/api/java/io/DataInputStream.html#readUnsignedShort--)是否適合您? – bradimus