Crates.io | n85 |
lib.rs | n85 |
version | 0.1.0 |
source | src |
created_at | 2022-08-19 18:32:31.661632 |
updated_at | 2022-08-19 18:32:31.661632 |
description | N85 (Ascii85 variant) encoder & decoder |
homepage | |
repository | https://github.com/Demindiro/n85 |
max_upload_size | |
id | 648817 |
size | 11,075 |
N85 is a binary-to-ASCII encoding based on Ascii85 but more suitable for use as strings
(i.e. excludes \
, '
and "
) and with a simpler implementation than the other variants.
Every 4 bytes is mapped to 5 characters, adding ~25% of storage overhead. For comparison, base64 maps every 3 bytes to 4 characters, adding ~33% overhead.
let s = "Hello, world!";
let enc = n85::encode_string(s.as_ref());
assert_eq!(&enc, "Yb(qJ[NH@N0AO?HI(");
let dec = n85::decode_vec(enc.as_ref()).unwrap();
assert_eq!(&dec, s.as_bytes());
An arbitrary byte string is split into chunks for 32-bit little endian integers. The last chunk is padded with zeroes.
Every integer is 5 times divided by 85, giving 5 remainders.
40 ((
) is added to each remainder.
If the result is equal or greater to 92 (\
), 1 is added.
If the last chunk is 1, 2, 3 or 4 byte large, 2, 3, 4 or 5 characters are used for encoding respectively.