getLong static method
Converts eight bytes of a byte array to a signed 64-bit integer.
The byte order is big-endian.
Implementation
static int getLong(Uint8List buffer, int offset) {
assert(buffer.length >= offset + 8);
// https://stackoverflow.com/questions/337355/javascript-bitwise-shift-of-long-long-number
int part1 = (buffer[offset] & 0xff) << 24 | (buffer[offset + 1] & 0xff) << 16 | (buffer[offset + 2] & 0xff) << 8 | (buffer[offset + 3] & 0xff);
int part2 = (buffer[offset + 4] & 0xff) << 24 | (buffer[offset + 5] & 0xff) << 16 | (buffer[offset + 6] & 0xff) << 8 | (buffer[offset + 7] & 0xff);
if (buffer[offset] & 0x80 > 0) {
return -1 * ((part1 * 256 * 256 * 256 * 256) + part2);
}
return (part1 * 256 * 256 * 256 * 256) + part2;
// web platform cannot handle large bitshifts (more than 52 bit)
// return (buffer[offset] & 0xff) << 56 |
// (buffer[offset + 1] & 0xff) << 48 |
// (buffer[offset + 2] & 0xff) << 40 |
// (buffer[offset + 3] & 0xff) << 32 |
// (buffer[offset + 4] & 0xff) << 24 |
// (buffer[offset + 5] & 0xff) << 16 |
// (buffer[offset + 6] & 0xff) << 8 |
// (buffer[offset + 7] & 0xff);
}