如何使用Rust将Base64字符串转换为十六进制字符串?
在Rust中将Base64字符串转换为十六进制字符串
在Rust里完成这个转换很直接,通常会用社区维护的base64和hex两个 crate——它们比手动实现更高效且不易出错。
步骤1:添加依赖
先在你的Cargo.toml里加入这两个依赖:
[dependencies] base64 = "0.21" hex = "0.4"
步骤2:编写转换逻辑
核心思路是先把Base64字符串解码成字节数组,再将字节数组编码为十六进制字符串,同时处理可能的格式错误。
示例代码:
use base64::engine::general_purpose; use base64::Engine as _; use hex::encode; fn base64_to_hex(base64_str: &str) -> Result<String, Box<dyn std::error::Error>> { // 解码Base64字符串为字节数组 let decoded_bytes = general_purpose::STANDARD.decode(base64_str)?; // 将字节数组编码为十六进制字符串 let hex_str = encode(decoded_bytes); Ok(hex_str) } fn main() { let sample_base64 = "SGVsbG8gV29ybGQh"; // 对应"Hello World!" match base64_to_hex(sample_base64) { Ok(hex) => println!("转换结果: {}", hex), // 输出: 48656c6c6f20576f726c6421 Err(e) => eprintln!("转换失败: {}", e), } }
代码说明
general_purpose::STANDARD是标准Base64编码引擎,处理常规格式;如果需要兼容URL安全的Base64,改用general_purpose::URL_SAFE即可。hex::encode默认生成小写十六进制字符串,要生成大写的话用hex::encode_upper。- 错误处理用
Box<dyn std::error::Error>统一捕获Base64解码时的格式错误。
无第三方依赖方案(仅用标准库)
如果不想引入外部 crate,Rust 1.70+的标准库自带了base64模块,十六进制编码可以手动通过格式化实现:
use std::base64::{Engine as _, engine::general_purpose}; fn base64_to_hex_std(base64_str: &str) -> Result<String, Box<dyn std::error::Error>> { let decoded_bytes = general_purpose::STANDARD.decode(base64_str)?; // 手动将字节格式化为十六进制字符串 let hex_str = decoded_bytes.iter() .map(|b| format!("{:02x}", b)) .collect(); Ok(hex_str) } fn main() { let sample_base64 = "SGVsbG8gV29ybGQh"; match base64_to_hex_std(sample_base64) { Ok(hex) => println!("转换结果: {}", hex), Err(e) => eprintln!("转换失败: {}", e), } }
这个方案效率略低于专门的hex crate,但简单场景下完全够用。
内容的提问来源于stack exchange,提问作者SixoneKui
相关产品推荐
相关产品推荐

