二进制文件将2字节(无符号短)从二进制文件转换为Java短文件
我有一个带未签名的短裤的二进制文件。我需要将这个字节中的无符号值转换为JAVA中的原语short。字节顺序是小端。我试着这样做:
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 和系统。出来println(Integer.toBinaryString)给我们 10000000101101没错
案例2(不正常) 无记名短票:384 十六进制(小尾端):80 01 二进制(大端)格式:0000 0001 1000 0000 和系统。出来println(Integer.toBinaryString)给我们 11111111111111111111111110000000. 系统出来println(s)给我们-128。这是不对的。 如何从中获得384值
有人知道为什么它不起作用
# 1 楼答案
在进行整数计算之前,Java会将所有内容转换为int,当字节有符号时,就会得到符号扩展。您必须通过按位并使用0xFF将字节置于[0;255]范围内: