Rust Base编码转换库base-encode的使用,支持高效二进制、十六进制等编码格式互转
Rust Base编码转换库base-encode的使用,支持高效二进制、十六进制等编码格式互转
base-encode是一个Rust库,用于在2到256之间的任何进制之间编码和解码数据。
基本用法
use base_encode::{encode, decode};
let data = vec![0x27, 0x10];
encode(&data, 10) // [1, 0, 0, 0, 0]
// 前导零会被保留
decode(&[0, 0, 2, 5, 6], 10) // [0, 0, 1, 0]
字符串转换
from_str("255", 10, b"0123456789").unwrap() // [0xff]
to_string(&[0xa], 2, b"OX").unwrap() // "XOXO"
完整示例
下面是一个完整的示例,展示如何使用base-encode库进行不同进制之间的转换:
use base_encode::{encode, decode, from_str, to_string};
fn main() {
// 基本编码解码示例
let data = vec![0x27, 0x10];
let encoded = encode(&data, 10);
println!("编码结果: {:?}", encoded); // 输出: [1, 0, 0, 0, 0]
let decoded = decode(&[0, 0, 2, 5, 6], 10);
println!("解码结果: {:?}", decoded); // 输出: [0, 0, 1, 0]
// 字符串转换示例
let from_str_result = from_str("255", 10, b"0123456789").unwrap();
println!("字符串转字节: {:?}", from_str_result); // 输出: [0xff]
let to_str_result = to_string(&[0xa], 2, b"OX").unwrap();
println!("字节转字符串: {}", to_str_result); // 输出: "XOXO"
// 二进制转换示例
let binary_data = vec![0b10101010];
let binary_encoded = encode(&binary_data, 2);
println!("二进制编码: {:?}", binary_encoded); // 输出: [1, 0, 1, 0, 1, 0, 1, 0]
// 十六进制转换示例
let hex_data = vec![0xAB, 0xCD];
let hex_encoded = encode(&hex_data, 16);
println!("十六进制编码: {:?}", hex_encoded); // 输出: [10, 11, 12, 13]
}
安装
在Cargo.toml中添加以下依赖:
base-encode = "0.3.1"
或者运行以下命令:
cargo add base-encode
特性
- 支持2到256之间的任何进制转换
- 保留前导零
- 提供字符串与字节数组之间的转换功能
- 高效实现
这个库特别适合需要处理不同进制数据转换的场景,如密码学、数据编码解码等应用。
更完整示例代码
use base_encode::{encode, decode, from_str, to_string};
fn main() {
// 示例1: 十进制转换
let decimal_data = vec![123, 45];
println!("原始十进制数据: {:?}", decimal_data);
// 编码为十进制表示
let decimal_encoded = encode(&decimal_data, 10);
println!("编码为十进制数字序列: {:?}", decimal_encoded);
// 解码回原始字节
let decimal_decoded = decode(&decimal_encoded, 10);
println!("解码回字节: {:?}", decimal_decoded);
// 示例2: 二进制转换
let binary_data = vec![0b11001100, 0b10101010];
println!("\n原始二进制数据: {:08b} {:08b}", binary_data[0], binary_data[1]);
// 编码为二进制表示
let binary_encoded = encode(&binary_data, 2);
println!("编码为二进制序列: {:?}", binary_encoded);
// 示例3: 自定义进制转换(基数为36)
let custom_base_data = vec![255, 128];
println!("\n自定义基数36数据: {:?}", custom_base_data);
// 编码为基数为36的表示
let custom_encoded = encode(&custom_base_data, 36);
println!("编码为基数36序列: {:?}", custom_encoded);
// 示例4: 字符串与字节数组转换
println!("\n字符串转换示例:");
// 使用自定义字符集将字符串转换为字节
let custom_charset = b"!@#$%^&*()";
let str_data = "@#$";
let bytes_from_str = from_str(str_data, 10, custom_charset).unwrap();
println!("字符串'{}'转换为字节: {:?}", str_data, bytes_from_str);
// 将字节转换为自定义字符集的字符串
let bytes_to_str = vec![1, 2];
let str_result = to_string(&bytes_to_str, 10, custom_charset).unwrap();
println!("字节{:?}转换为字符串: '{}'", bytes_to_str, str_result);
// 示例5: 处理前导零
println!("\n前导零处理示例:");
let leading_zero_data = vec![0, 0, 1, 2];
let leading_zero_encoded = encode(&leading_zero_data, 10);
println!("包含前导零的数据: {:?}", leading_zero_data);
println!("编码后保留前导零: {:?}", leading_zero_encoded);
}
这个更完整的示例展示了:
- 十进制数据的编码解码
- 二进制数据的转换
- 自定义基数(36)的转换
- 使用自定义字符集进行字符串转换
- 前导零的保留处理
每个示例都包含详细的打印输出,方便理解转换过程。
1 回复
Rust Base编码转换库base-encode使用指南
base-encode
是一个高效的Rust库,用于在不同进制编码格式之间进行转换,特别适合处理二进制、十六进制等常见编码格式。
功能特性
- 支持2-36进制之间的任意转换
- 零拷贝设计,高性能
- 无堆分配(no_std兼容)
- 支持自定义字母表
- 提供const fn支持
安装
在Cargo.toml中添加依赖:
[dependencies]
base-encode = "1.0"
基本用法
数字转字符串
use base_encode::encode;
let hex = encode(255, 16); // "ff"
let binary = encode(10, 2); // "1010"
let base36 = encode(12345, 36); // "9ix"
字符串转数字
use base_encode::decode;
let num = decode("ff", 16).unwrap(); // 255
let num = decode("1010", 2).unwrap(); // 10
let num = decode("9ix", 36).unwrap(); // 12345
高级用法
自定义字母表
use base_encode::{encode_with_alphabet, decode_with_alphabet};
const ALPHABET: &[u8] = b"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
let encoded = encode_with_alphabet(12345, ALPHABET); // "9IX"
let decoded = decode_with_alphabet("9IX", ALPHABET).unwrap(); // 12345
处理大数
use base_encode::{encode_u128, decode_to_u128};
let hex = encode_u128(u128::MAX, 16); // "ffffffffffffffffffffffffffffffff"
let num = decode_to_u128("ffffffffffffffffffffffffffffffff", 16).unwrap(); // u128::MAX
性能优化
对于已知长度的转换,可以使用固定缓冲区避免分配:
use base_encode::encode_fixed;
let mut buffer = [0u8; 32];
let hex = encode_fixed(255, 16, &mut buffer); // "ff"
错误处理
所有解码操作都返回Result
类型:
use base_encode::decode;
match decode("zz", 16) {
Ok(num) => println!("Got number: {}", num),
Err(e) => eprintln!("Error: {}", e),
}
使用场景
- 网络协议中的二进制数据编码
- 短URL生成
- 加密货币地址编码
- 数据压缩存储
base-encode
库因其高效性和灵活性,成为Rust生态中处理进制转换的优秀选择。
完整示例代码
// 引入base-encode库
use base_encode::{encode, decode, encode_with_alphabet, decode_with_alphabet, encode_u128, decode_to_u128, encode_fixed};
fn main() {
// 基本用法示例 - 数字转字符串
println!("=== 基本用法: 数字转字符串 ===");
let hex = encode(255, 16); // 十进制255转十六进制
println!("255 in hex: {}", hex); // 输出: ff
let binary = encode(10, 2); // 十进制10转二进制
println!("10 in binary: {}", binary); // 输出: 1010
let base36 = encode(12345, 36); // 十进制12345转36进制
println!("12345 in base36: {}", base36); // 输出: 9ix
// 基本用法示例 - 字符串转数字
println!("\n=== 基本用法: 字符串转数字 ===");
let num = decode("ff", 16).unwrap(); // 十六进制ff转十进制
println!("ff in decimal: {}", num); // 输出: 255
let num = decode("1010", 2).unwrap(); // 二进制1010转十进制
println!("1010 in decimal: {}", num); // 输出: 10
let num = decode("9ix", 36).unwrap(); // 36进制9ix转十进制
println!("9ix in decimal: {}", num); // 输出: 12345
// 高级用法示例 - 自定义字母表
println!("\n=== 高级用法: 自定义字母表 ===");
const ALPHABET: &[u8] = b"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
let encoded = encode_with_alphabet(12345, ALPHABET); // 使用自定义字母表编码
println!("12345 with custom alphabet: {}", encoded); // 输出: 9IX
let decoded = decode_with_alphabet("9IX", ALPHABET).unwrap(); // 使用自定义字母表解码
println!("9IX with custom alphabet: {}", decoded); // 输出: 12345
// 高级用法示例 - 处理大数
println!("\n=== 高级用法: 处理大数 ===");
let max_u128 = u128::MAX;
let hex = encode_u128(max_u128, 16); // u128最大值转十六进制
println!("u128::MAX in hex: {}", hex); // 输出: ffffffffffffffffffffffffffffffff
let num = decode_to_u128("ffffffffffffffffffffffffffffffff", 16).unwrap(); // 十六进制转u128
println!("hex to u128: {}", num); // 输出: 340282366920938463463374607431768211455
// 性能优化示例
println!("\n=== 性能优化: 固定缓冲区 ===");
let mut buffer = [0u8; 32];
let hex = encode_fixed(255, 16, &mut buffer); // 使用固定缓冲区编码
println!("255 in hex (fixed buffer): {}", hex); // 输出: ff
// 错误处理示例
println!("\n=== 错误处理 ===");
match decode("zz", 16) { // 无效的十六进制字符串
Ok(num) => println!("Got number: {}", num),
Err(e) => eprintln!("Error: {}", e), // 输出: Error: Invalid character 'z' at position 0 for radix 16
}
}
这个完整示例演示了base-encode库的所有主要功能,包括基本转换、自定义字母表、大数处理、性能优化和错误处理。你可以直接复制这段代码到你的Rust项目中运行测试。