public long getLong(int off) {
    checkOffsets(off, off + 8);
    int part1 =
        (getByte0(off) << 24)
            | (getUnsignedByte0(off + 1) << 16)
            | (getUnsignedByte0(off + 2) << 8)
            | getUnsignedByte0(off + 3);
    int part2 =
        (getByte0(off + 4) << 24)
            | (getUnsignedByte0(off + 5) << 16)
            | (getUnsignedByte0(off + 6) << 8)
            | getUnsignedByte0(off + 7);

    return (part2 & 0xffffffffL) | ((long) part1) << 32;
  }
Gets the {@code signed long} value at a particular offset.

@param off {@code >= 0, < (size() - 7);} offset to fetch
@return {@code signed int} at that offset
android/android_framework/dex-maker/src/main/java/com/android/dx/util/ByteArray.java