#numbers #slice #read-write #u8 #binary #byte #from-to

byte-io

从/to u8 切片读取/写入数字

2 个版本

使用旧的 Rust 2015

0.1.1 2016年9月25日
0.1.0 2016年8月24日

#2 in #from-to

Download history 22/week @ 2024-03-30 6/week @ 2024-04-06 141/week @ 2024-06-29 3/week @ 2024-07-06

144 每月下载量

MIT 许可证

14KB
290 代码行

byte-io: 一个简单的库,用于读取/写入二进制中的数字。

此库只包含4个函数

  • write_be: 将数字写入大端切片。

  • read_be: 从大端切片读取数字。

  • write_le: 将数字写入小端切片。

  • read_le: 从小端切片读取数字。

请注意,byte-io 并不专注于效率,这意味着在处理大流(例如几百兆字节或更多)时可能会较慢。

如何使用

将以下行添加到您的 [dependencies] 部分 Cargo.toml

byte-io = { git = "https://github.com/zhaihj/byte-io-rust", branch= "master" }

或者您也可以从 crates.io 下载它

byte-io = "0.1"

示例

从切片中读取很简单

use byte_io::*;

fn main() {
 let data = [0x00, 0x00, 0x01, 0x01, 0xAB, 0xCD, 0xEF, 0x89];
 assert_eq!(read_be::<u32>(&data), 0x0101);
 assert_eq!(read_be::<u16>(&data[4..]), 0xABCD);
 assert_eq!(read_le::<u16>(&data[4..]), 0xCDAB);
 assert_eq!(read_le::<u8>(&data[4..]), 0xAB);
}

写入也很容易

use byte_io::*;

fn main() {
 let mut buf = [0u8;8];
 write_be(&0xABCDEFu32, &mut buf);
 assert_eq!(buf, [0x00, 0xAB, 0xCD, 0xEF, 0x00, 0x00, 0x00, 0x00]);
 write_le(&0xABCDEFu32, &mut buf[4..]);
 assert_eq!(buf, [0x00, 0xAB, 0xCD, 0xEF, 0xEF, 0xCD, 0xAB, 0x00]);
}

此外,您甚至可以读取/写入 Vec<T>

use byte_io::*;

fn main() {
 let mut buf = [0u8;8];
 let data = vec![0x1234u16,0x5678u16];
 write_le(&data, &mut buf);
 assert_eq!(buf, [0x34, 0x12, 0x78, 0x56, 0x00, 0x00, 0x00, 0x00]);
 assert_eq!(data, read_le::<Vec<u16>>(&buf[0..4]));
 let u32_vec = read_be::<Vec<u32>>(&buf[4..]);
 assert_eq!(u32_vec.len(), 1);
 assert_eq!(u32_vec.first(), Some(&0));
}

以下代码也有效

use byte_io::*;

fn main() {
 let buf = [0xAA, 0xBB, 0xCC, 0xDD];
 assert_eq!(u32::from_u8_be(&buf), 0xAABBCCDD);
}

无运行时依赖