| Crates.io | qr-base44 |
| lib.rs | qr-base44 |
| version | 0.1.1 |
| created_at | 2025-11-01 05:15:58.006438+00 |
| updated_at | 2025-11-21 09:53:26.597452+00 |
| description | Base44 encode/decode for arbitrary bytes using URL-safe QR-compatible alphabet |
| homepage | |
| repository | https://github.com/kookyleo/qr-base44 |
| max_upload_size | |
| id | 1911710 |
| size | 52,777 |
Base44 encoder/decoder for arbitrary bytes using a URL-safe QR-compatible alphabet.
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ$%*+-./: (44 characters)cargo add qr-base44
use qr_base44::{encode, decode};
let data: &[u8] = &[0x01, 0x02, 0xFF];
let s = encode(data);
let back = decode(&s).unwrap();
assert_eq!(back, data);
For fixed bit lengths (arbitrary size), use encode_bits for optimal space efficiency:
use qr_base44::{encode_bits, decode_bits};
// Encode 103 bits (e.g., compressed UUID)
let data = vec![0x12, 0x34, /* ... 13 bytes total */];
let s = encode_bits(103, &data); // Always 19 chars for 103 bits
let back = decode_bits(103, &s).unwrap();
assert_eq!(back, data);
// Compare efficiency:
// - encode_bits(103, &data) → 19 chars (optimal)
// - encode(&data) → 20 chars (byte-pair)
// Savings: 5% for 103-bit data
Performance optimization: encode_bits/decode_bits automatically use native integer types (u64 for ≤64 bits, u128 for ≤128 bits) instead of BigInt for better performance on common bit sizes.
encode/decode): Fast, general-purpose encoding with simple integer operations. Best for arbitrary-length byte data.encode_bits/decode_bits): Space-optimal encoding for fixed bit lengths using BigInt. Best when every character counts and bit length is known.For fixed-bit-length data, encode_bits achieves optimal compression:
| Bits | Bytes | encode (byte-pair) |
encode_bits (optimal) |
Savings | Use Case |
|---|---|---|---|---|---|
| 103 | 13 | 20 chars | 19 chars | 5.0% | Compressed UUID (qr-url) |
| 104 | 13 | 20 chars | 20 chars | 0% | - |
| 128 | 16 | 24 chars | 24 chars | 0% | UUID, AES-128 key |
| 256 | 32 | 48 chars | 47 chars | 2.1% | SHA-256 hash, AES-256 key |
| 512 | 64 | 96 chars | 94 chars | 2.1% | SHA-512 hash |
Use encode/decode (byte-pair) when:
Use encode_bits/decode_bits (optimal) when:
Performance vs Space Trade-off:
encode is significantly faster (simple integer ops vs BigInt)encode_bits saves at most 5% space for non-byte-aligned bit countsApache-2.0