#binary-data #decode #encode #no-std

no-std base91

将二进制数据编码为ASCII字符。类似于base64,但更高效。

2个不稳定版本

0.1.0 2021年9月5日
0.0.1 2019年6月2日

#2061 in 编码

Download history 506/week @ 2024-03-13 625/week @ 2024-03-20 756/week @ 2024-03-27 664/week @ 2024-04-03 473/week @ 2024-04-10 608/week @ 2024-04-17 520/week @ 2024-04-24 510/week @ 2024-05-01 541/week @ 2024-05-08 610/week @ 2024-05-15 510/week @ 2024-05-22 525/week @ 2024-05-29 534/week @ 2024-06-05 544/week @ 2024-06-12 930/week @ 2024-06-19 533/week @ 2024-06-26

2,663 每月下载量
用于 12 个crate(4 个直接使用)

MIT/Apache

25KB
380

basE91的Rust实现

CircleCI Documentation Current Version on crates.io MIT / Apache2 License

basE91是一种将二进制数据编码为ASCII字符的高级方法。它与base64类似,但更高效。basE91产生的开销取决于输入数据。最多为23%(与base64的33%相比),通常可降至14%,这通常发生在0字节块上。

更多信息请参阅 http://base91.sourceforge.net/

Joachim Henke为Rust实现的 basE91编码

还支持xml-friendly base91实现,由r-lyeh提供,支持引用,且对JSON、XML和TSV友好。

库功能

  • no_std
  • 编码/解码迭代器
  • 规范(Joachim Hanke)实现
  • 替代XML、JSON和TSV友好的(r-lyeh实现

示例

使用辅助函数

let source = "This is a random binary string";

let encode_as_vec: Vec<u8> = base91::slice_encode(source.as_bytes());
let decode_as_vec: Vec<u8> = base91::slice_decode(&encode_as_vec);

assert_eq!(
    "nX,<:WRT%yxtYQ:mbr4JB*H[LR/@Qj{o0aU=Z",
    String::from_utf8_lossy(&encode_as_vec)
);

assert_eq!(
    "This is a random binary string",
    String::from_utf8_lossy(&decode_as_vec)
);

使用迭代器

let source = "This is a random binary string";

let as_vec: Vec<u8> = base91::EncodeIterator::new(source.bytes()).collect();
let as_str: String = base91::EncodeIterator::new(source.bytes()).as_char_iter().collect();

assert_eq!(
    "nX,<:WRT%yxtYQ:mbr4JB*H[LR/@Qj{o0aU=Z",
    String::from_utf8_lossy(&as_vec)
);

assert_eq!(
    "nX,<:WRT%yxtYQ:mbr4JB*H[LR/@Qj{o0aU=Z",
    as_str
);

使用XML友好或其他特定变体

注意!如果您禁用功能 canonical 并启用功能 xml-friendly,则 base91::EncodeIteratorbase91::DecodeIterator 将默默地使用XmlFriendly变体。反过来,所有辅助函数都内部使用迭代器(slice_encodeslice_decode)。

use base91::iter::{EncodeGenericIterator, DecodeGenericIterator};
use base91::codemap::XmlFriendly;

let source = "This is a random binary string";

let encode_as_vec: Vec<u8> = EncodeGenericIterator::<XmlFriendly, _>::new(source.bytes()).collect();
let decode_as_vec: Vec<u8> = DecodeGenericIterator::<XmlFriendly, _>::new(encode_as_vec.iter().copied()).collect();

assert_eq!(
    "nX,-:WRT%yxtYQ:mbr4JB*H[LR/@Qj{o0aU=Z",
    String::from_utf8_lossy(&encode_as_vec)
);

assert_eq!(
    "This is a random binary string",
    String::from_utf8_lossy(&decode_as_vec)
);

许可证

当前的Rust实现提供在双 MIT/Apache2 许可证下。

致谢

原始的basE91是由Joachim Henke开发的,作为免费软件在BSD许可证的条款下发布。

无运行时依赖