tags:

views:

37

answers:

1

Hi, I have this bit of code which reads an 8 bytes array and converts it to a int64.

I would like to know how to tweak this code so it would work when receiving data represented with the reverse endian...

    protected static long getLong(byte[] b, int off)
    {
        return ((b[off + 7] & 0xFFL) >> 0) +
                ((b[off + 6] & 0xFFL) << 8) +
                ((b[off + 5] & 0xFFL) << 16) +
                ((b[off + 4] & 0xFFL) << 24) +
                ((b[off + 3] & 0xFFL) << 32) +
                ((b[off + 2] & 0xFFL) << 40) +
                ((b[off + 1] & 0xFFL) << 48) +
                (((long) b[off + 0]) << 56);
    }

Thanks for the help!

+1  A: 

How about:

protected static long getLong(byte[] b, int off)
{
    return ((b[off + 0] & 0xFFL) >> 0) +
            ((b[off + 1] & 0xFFL) << 8) +
            ((b[off + 2] & 0xFFL) << 16) +
            ((b[off + 3] & 0xFFL) << 24) +
            ((b[off + 4] & 0xFFL) << 32) +
            ((b[off + 5] & 0xFFL) << 40) +
            ((b[off + 6] & 0xFFL) << 48) +
            (((long) b[off + 7]) << 56);
}

and cleaned up into:

protected static long getLong(byte[] b, int off) {
    return ((b[off    ] & 0xFFL)      ) |
           ((b[off + 1] & 0xFFL) <<  8) |
           ((b[off + 2] & 0xFFL) << 16) |
           ((b[off + 3] & 0xFFL) << 24) |
           ((b[off + 4] & 0xFFL) << 32) |
           ((b[off + 5] & 0xFFL) << 40) |
           ((b[off + 6] & 0xFFL) << 48) |
           ((b[off + 7] & 0xFFL) << 56);
}
Software Monkey
cHao