# Crate bs62[−][src]

A Base62 encoder / decoder with support for leading zero bytes.

Normally, during the conversion of base10 (decimal) to base62, the input data is interpreted as one large number:

`[0x00, 0x13, 0x37] => 0x001337 => 4919 (decimal)`

As leading zeroes do not count to the value of a number (`001337 = 1337`), they are ignored while converting the number to base62.

This is achieved by prepending a `0x01` byte to the data before encoding, thus creating a number that starts with a `1`: `001337 => 1001337` (No zeroes are removed)

The leading `0x01` is removed after the data has been decoded from bse62 back to base10: `1001337 => 001337`

## Alphabet

``````0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
``````

This is the same alphabet that CyberChef uses by default: `[0-9][A-Z][a-z]`.

Wikipedia/Base62 suggests another alphabet (`[A-Z][a-z][0-9]`) but I found that many online converters use either `[0-9][A-Z][a-z]` or `[0-9][a-z][A-Z]`. And as I love CyberChef, I decided to use their default alphabet aswell. I also think that starting with numbers is more natural as base62 is actually a number system like decimal (which is actually base10) or hexa-decimal (base16).

## Examples

### Convert Data to Base62

This method will prepend `0x01` to the data before encoding it.

```let data = vec![0x13, 0x37];
let encoded = bs62::encode_data(&data);

assert_eq!(encoded, "IKN")```

### Parse Base62 to Data

This method expects a leading `0x01` in the byte array after decoding. It removes the first byte before returning the byte array.

```let encoded = "IKN";
let data = bs62::decode_data(&encoded)?;

assert_eq!(data, vec![0x13_u8, 0x37]);```

### Convert a Number to Base62

```let num = 1337;
let encoded = bs62::encode_num(&num);

assert_eq!(encoded, "LZ")```

### Parse Base62 to Number

```let num = 1337;
let encoded = bs62::encode_num(&num);

assert_eq!(encoded, "LZ")```

## Re-exports

 `pub extern crate num_bigint;` `pub extern crate num_traits;`

## Functions

 decode_data Decode data with support for leading zeroes (that has been encoded using `encode_data`). decode_data_forgiving Decode data just like `decode_data` but allow data that was not prepended with a `0x01` byte. decode_num Decode a base62 string to a base10 (decimal) number. encode_data Encode data with support for leading zeroes by prepending a `0x01` byte to the data. encode_num Convert a base10 (decimal) number to base62.