toBaseBytes function
Converts given data bytes into base bytes
Implementation
List<int> toBaseBytes(Iterable<int> input, int base, {int? padding}) {
int baseBit = (base - 1).bitLength;
int mask = (pow(2, baseBit) - 1).toInt();
int inpLength = input.length;
int outputBlockLength = baseBit;
while (outputBlockLength % 8 != 0) {
outputBlockLength += baseBit;
}
int inputBlockLength = outputBlockLength ~/ 8;
outputBlockLength ~/= baseBit;
int count;
if (padding == null) {
int inputBitLength = inpLength * 8;
count = (inputBitLength / baseBit).ceil();
} else {
count =
(inpLength / inputBlockLength).ceil() * inputBlockLength * 8 ~/ baseBit;
}
int inputPointer = 0;
int outputPointer = 0;
final out = List<int>.filled(count, 0, growable: true);
while (inpLength - inputPointer >= inputBlockLength) {
pack(input.skip(inputPointer).take(inputBlockLength), baseBit, mask, out,
outputPointer);
inputPointer += inputBlockLength;
outputPointer += outputBlockLength;
}
if (inpLength != inputPointer) {
packPartial(input.skip(inputPointer), baseBit, mask, outputBlockLength, out,
outputPointer,
padding: padding);
}
return out;
}