encodeBase32 function
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();
}