encodeBase32 function

String encodeBase32(
  1. Uint8List bytes
)

Encodes bytes as an unpadded Crockford base32 string, most significant bit first. Stays web-safe by never accumulating more than ~13 bits.

Implementation

String encodeBase32(Uint8List bytes) {
  final out = StringBuffer();
  var buffer = 0;
  var bitsLeft = 0;
  for (final b in bytes) {
    buffer = (buffer << 8) | b;
    bitsLeft += 8;
    while (bitsLeft >= 5) {
      bitsLeft -= 5;
      out.write(_base32Alphabet[(buffer >> bitsLeft) & 0x1F]);
    }
    // Drop the bits already emitted so `buffer` stays small.
    buffer &= (1 << bitsLeft) - 1;
  }
  if (bitsLeft > 0) {
    out.write(_base32Alphabet[(buffer << (5 - bitsLeft)) & 0x1F]);
  }
  return out.toString();
}