convertBits function

List<int> convertBits(
  1. dynamic data,
  2. int from,
  3. int to, {
  4. bool strictMode = false,
})

Implementation

List<int> convertBits(data, int from, int to, {bool strictMode = false}) {
  double len = data.length * from / to;
  final length = strictMode ? len.floor() : len.ceil();

  final mask = (1 << to) - 1;
  final result = List.generate(length, (_) => 0);

  var index = 0;
  var accumulator = 0;
  var bits = 0;

  for (var i = 0; i < data.length; i++) {
    var value = data[i];
    accumulator = (accumulator << from) | value;
    bits += from;
    while (bits >= to) {
      bits -= to;
      result[index] = (accumulator >> bits) & mask;
      index++;
    }
  }

  if (!strictMode) {
    if (bits > 0) {
      result[index] = (accumulator << (to - bits)) & mask;
      index++;
    }
  } else {}

  return result;
}