toBaseBytes function

List<int> toBaseBytes(
  1. Iterable<int> input,
  2. int base, {
  3. int? padding,
})

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