【Rust每周一库】hex - 处理hex数据

今天介绍一个比较基础和经常使用的库hex,用来处理十六进制数据的编码。导入库:
   
[dependencies]
hex = "0.4.2"

功能

hex库提供了一些便捷的方法用来编码十六进制数据

decode和decode_to_slice

decode将16进制数据解码成字节并返回,好比下面就将"Hello world!"的16进制模式转化为"Hello world!"的字节表示
   
assert_eq!(
hex::decode("48656c6c6f20776f726c6421"),
Ok("Hello world!".to_owned().into_bytes())
);
decode_to_slice将16进制数据解码并赋值给一个buffer
   
let mut bytes = [0u8; 4];
assert_eq!(hex::decode_to_slice("6b697769", &mut bytes as &mut [u8]), Ok(()));
assert_eq!(&bytes, b"kiwi");

encode, encode_to_slice和encode_upper

encode能够将输入数据编码返回一个16进制的字符串
   
assert_eq!(hex::encode("Hello world!"), "48656c6c6f20776f726c6421");
encode_to_slice则把数据人数据编码并赋值给一个buffer
   
let mut bytes = [0u8; 4 * 2];
hex::encode_to_slice(b"kiwi", &mut bytes)?;
assert_eq!(&bytes, b"6b697769");
encode_upper和encode相同,只是返回的16进制字符串中的字母都变成了大写
   
assert_eq!(hex::encode_upper("Hello world!"), "48656C6C6F20776F726C6421");

serde支持

打开feature="serde"时,将对字节数据使用hex编码解码
   
use serde::{Serialize, Deserialize};

#[derive(Serialize, Deserialize)]
struct Foo {
#[serde(with = "hex")]
bar: Vec<u8>,
}

小结

好了,hex就是一个简单又基础的库。不过却很是重要。若是你看到那些hex的字符串就能想到些什么,那么恭喜你,这个库必定就是你最经常使用的库了~

本文分享自微信公众号 - Rust语言中文社区(rust-china)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。微信

相关文章
相关标签/搜索