# decode static method

Uint8List decode(

1. String base32, {
2. Encoding encoding = Encoding.standardRFC4648,

})

Takes in a `base32` string and decodes it back to a Uint8List that can be converted to a hex string using hexEncode

## Implementation

    static Uint8List decode(String base32,
        {Encoding encoding = Encoding.standardRFC4648}) {
      if (base32.isEmpty) {
        return Uint8List(0);
      }

      base32 = _pad(base32, encoding: encoding);

      if (!isValid(base32, encoding: encoding)) {
        throw FormatException('Invalid Base32 characters');
      }

      if (encoding == Encoding.crockford) {
        base32 = base32.replaceAll('-', '');
      } // Handle crockford dashes.

      var base32Decode = EncodingUtils.getDecodeMap(encoding);
      var length = base32.indexOf('=');
      if (length == -1) {
        length = base32.length;
      }

      var i = 0;
      var count = length >> 3 << 3;
      var bytes = <int>[];
      while (i < count) {
        var v1 = base32Decode[base32[i++]] ?? 0;
        var v2 = base32Decode[base32[i++]] ?? 0;
        var v3 = base32Decode[base32[i++]] ?? 0;
        var v4 = base32Decode[base32[i++]] ?? 0;
        var v5 = base32Decode[base32[i++]] ?? 0;
        var v6 = base32Decode[base32[i++]] ?? 0;
        var v7 = base32Decode[base32[i++]] ?? 0;
        var v8 = base32Decode[base32[i++]] ?? 0;
        bytes.add((v1 << 3 | v2 >> 2) & 255);
        bytes.add((v2 << 6 | v3 << 1 | v4 >> 4) & 255);
        bytes.add((v4 << 4 | v5 >> 1) & 255);
        bytes.add((v5 << 7 | v6 << 2 | v7 >> 3) & 255);
        bytes.add((v7 << 5 | v8) & 255);
      }

      var remain = length - count;
      if (remain == 2) {
        var v1 = base32Decode[base32[i++]] ?? 0;
        var v2 = base32Decode[base32[i++]] ?? 0;
        bytes.add((v1 << 3 | v2 >> 2) & 255);
      } else if (remain == 4) {
        var v1 = base32Decode[base32[i++]] ?? 0;
        var v2 = base32Decode[base32[i++]] ?? 0;
        var v3 = base32Decode[base32[i++]] ?? 0;
        var v4 = base32Decode[base32[i++]] ?? 0;
        bytes.add((v1 << 3 | v2 >> 2) & 255);
        bytes.add((v2 << 6 | v3 << 1 | v4 >> 4) & 255);
      } else if (remain == 5) {
        var v1 = base32Decode[base32[i++]] ?? 0;
        var v2 = base32Decode[base32[i++]] ?? 0;
        var v3 = base32Decode[base32[i++]] ?? 0;
        var v4 = base32Decode[base32[i++]] ?? 0;
        var v5 = base32Decode[base32[i++]] ?? 0;
        bytes.add((v1 << 3 | v2 >> 2) & 255);
        bytes.add((v2 << 6 | v3 << 1 | v4 >> 4) & 255);
        bytes.add((v4 << 4 | v5 >> 1) & 255);
      } else if (remain == 7) {
        var v1 = base32Decode[base32[i++]] ?? 0;
        var v2 = base32Decode[base32[i++]] ?? 0;
        var v3 = base32Decode[base32[i++]] ?? 0;
        var v4 = base32Decode[base32[i++]] ?? 0;
        var v5 = base32Decode[base32[i++]] ?? 0;
        var v6 = base32Decode[base32[i++]] ?? 0;
        var v7 = base32Decode[base32[i++]] ?? 0;
        bytes.add((v1 << 3 | v2 >> 2) & 255);
        bytes.add((v2 << 6 | v3 << 1 | v4 >> 4) & 255);
        bytes.add((v4 << 4 | v5 >> 1) & 255);
        bytes.add((v5 << 7 | v6 << 2 | v7 >> 3) & 255);
      }
      return Uint8List.fromList(bytes);
    }