convertBits function
Implementation
List<int> convertBits(
{required List<int> data,
required int from,
required int to,
required bool pad}) {
var acc = 0;
var bits = 0;
var result = <int>[];
var maxv = (1 << to) - 1;
data.forEach((v) {
if (v < 0 || (v >> from) != 0) {
throw Exception();
}
acc = (acc << from) | v;
bits += from;
while (bits >= to) {
bits -= to;
result.add((acc >> bits) & maxv);
}
});
if (pad) {
if (bits > 0) {
result.add((acc << (to - bits)) & maxv);
}
} else if (bits >= from) {
throw InvalidPadding('illegal zero padding');
} else if (((acc << (to - bits)) & maxv) != 0) {
throw InvalidPadding('non zero');
}
return result;
}