0

我的问题是关于 Java

Java 的 BitConverter.ToUInt16 等价物是什么?

我正在尝试翻译这种 C# 方法:

public static implicit operator ushort(HashlinkReader p)
        {
            ushort tmp = BitConverter.ToUInt16(p.Data.ToArray(), p.Position);
            p.Position += 2;
            return tmp;
        }

到 Java:

public static int convertToInt(HashlinkReader p)
    {
        byte[] byteArray = new byte[p.Data.size()];
        for (int index = 0; index < p.Data.size(); index++) {
            byteArray[index] = p.Data.get(index);
        }
        int tmp = toInt16(byteArray, p.Position);
        p.Position += 2;
        return tmp;
    }
    
    public static short toInt16(byte[] bytes, int index) //throws Exception
    {
        return (short)((bytes[index + 1] & 0xFF) | ((bytes[index] & 0xFF) << 0));
        //return (short)(
        //        (0xff & bytes[index]) << 8 |
        //                (0xff & bytes[index + 1]) << 0
        //);
    }

但我知道那是错误的。怎么会是对的?

4

1 回答 1

3

你想要一个ByteBuffer

public static short toInt16(byte[] bytes, int index) {
    return ByteBuffer.wrap(bytes).order(ByteOrder.nativeOrder())
        .position(index).getShort();
}

对于 Java 7,方法调用是相同的,但由于它们的返回类型,需要将它们拆分为多行:

public static short toInt16(byte[] bytes, int index) {
    ByteBuffer buffer =
        ByteBuffer.wrap(bytes).order(ByteOrder.nativeOrder());
    buffer.position(index);
    return buffer.getShort();
}
于 2020-06-30T01:27:45.277 回答