2 个版本
使用旧的 Rust 2015
0.1.1 | 2016年9月25日 |
---|---|
0.1.0 | 2016年8月24日 |
#2 in #from-to
144 每月下载量
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);
}