decodeFixed32 function

Map<String, int> decodeFixed32(
  1. List<int> buffer,
  2. int offset
)

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