将DWORD字节数组转换为无符号长整数

时间:2016-09-07 15:09:32

标签: java bytearray unsigned

我想要一个小端DWORD字节数组的无符号值。

这就是我写的:

private long getUnsignedInt(byte[] data) {
        long result = 0;
        for (int i = 0; i < data.length; i++) {
            result += (data[i] & 0xFF) << 8 * (data.length - 1 - i);
        }
        return result;
}

是不是?

2 个答案:

答案 0 :(得分:2)

不,我是一个大端的人。

public long readUInt(byte[] data) {
    // If you want to tackle different lengths for little endian:
    //data = Arrays.copyOf(data, 4);
    return ByteBuffer.wrap(data)
        .order(ByteOrder.LITTLE_ENDIAN)
        .getInt() & 0xFF_FF_FF_FFL;
}

上面做了4字节到(带符号)的int转换,然后使它无符号。

答案 1 :(得分:1)

对BigEndian进行了更正

如果用DWORD表示32位无符号整数,请尝试使用

    public long readUInt(byte[] data) {
            return (
                ((long)(data[3] & 0xFF) << 24) |
                ((long)(data[2] & 0xFF) << 16) |
                ((long)(data[1] & 0xFF) << 8) |
                ((long)(data[0] & 0xFF) << 0));
    }

Joop Eggen的回答是正确的,我认为这个更快,因为没有对象分配。