我有一个带有无符号短整型的二进制文件。我需要将这些字节中的无符号值转换为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(正确): 无符号短整型: 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的值?
有人知道为什么它不能正常工作吗?
DataInputStream#readUnsignedShort
对你有用吗? - bradimus