convertBits function
Implementation
List<int> convertBits(List<int> data, int fromBits, int toBits, bool pad) {
var acc = 0;
var bits = 0;
final maxv = (1 << toBits) - 1;
final result = <int>[];
for (final value in data) {
if (value < 0 || value >> fromBits != 0) {
throw Exception('Invalid value: $value');
}
acc = (acc << fromBits) | value;
bits += fromBits;
while (bits >= toBits) {
bits -= toBits;
result.add((acc >> bits) & maxv);
}
}
if (pad) {
if (bits > 0) {
result.add((acc << (toBits - bits)) & maxv);
}
} else if (bits >= fromBits || ((acc << (toBits - bits)) & maxv) != 0) {
throw Exception('Invalid data');
}
return result;
}