有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

二进制文件将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) 个答案

  1. # 1 楼答案

    在进行整数计算之前,Java会将所有内容转换为int,当字节有符号时,就会得到符号扩展。您必须通过按位并使用0xFF将字节置于[0;255]范围内:

    s = (short) ((bytes[2*j + 1] & 0xFF) << 8 | (bytes[2 * j] & 0xFF));