【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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。微信

相關文章
相關標籤/搜索