Изменить этот код для чтения байтов в обратном порядке байтов? - PullRequest
0 голосов
/ 28 апреля 2010

У меня есть этот бит кода, который читает массив из 8 байтов и преобразует его в int64.

Я хотел бы знать, как настроить этот код, чтобы он работал при получении данных, представленных с обратным порядком байтов ...

    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);
    }

Спасибо за помощь!

1 Ответ

1 голос
/ 28 апреля 2010

Как насчет:

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);
}

и очищены в:

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);
}
...