decodeFixed32 function
Decodes 4 little-endian bytes from buffer starting at offset as an
unsigned 32-bit integer.
Returns a map with two entries:
'value': the decoded 32-bit unsigned integer.'bytesRead': always 4.
Throws a RangeError if there are fewer than 4 bytes available starting
at offset.
Implementation
Map<String, int> decodeFixed32(List<int> buffer, int offset) {
if (offset + 4 > buffer.length) {
throw RangeError(
'Not enough bytes to decode fixed32 at offset $offset '
'(need 4, have ${buffer.length - offset})',
);
}
int value =
buffer[offset] |
(buffer[offset + 1] << 8) |
(buffer[offset + 2] << 16) |
(buffer[offset + 3] << 24);
// Mask to unsigned 32-bit to avoid sign extension on 64-bit Dart ints.
value = value & 0xFFFFFFFF;
return {'value': value, 'bytesRead': 4};
}