代码之家  ›  专栏  ›  技术社区  ›  Bruno

是否修改此代码以读取反向endian中的字节?

  •  0
  • Bruno  · 技术社区  · 14 年前

    我有一段代码,它读取一个8字节数组并将其转换为一个Int64。

    我想知道如何调整这段代码,以便在接收用反向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);
        }
    

    谢谢你的帮助!

    1 回复  |  直到 14 年前
        1
  •  1
  •   L. Cornelius Dol    14 年前

    怎么样:

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