13个版本 (5个稳定版)
1.2.2 | 2022年10月28日 |
---|---|
1.2.1 | 2022年2月25日 |
1.2.0 | 2021年10月19日 |
1.0.0 | 2020年10月13日 |
0.1.0 | 2017年8月14日 |
#76 in Rust模式
每月623,157次下载
用于 1,993 个crate (43个直接使用)
34KB
729 行
byte-slice-cast
在字节切片和另一个内置基本数值类型的切片之间进行安全转换。
许可协议
byte-slice-cast遵循MIT许可协议(LICENSE 或 http://opensource.org/licenses/MIT)。
贡献
欢迎以拉取请求的形式提供任何类型的贡献。
除非您明确声明,否则您有意提交以包含在byte-slice-cast中的任何贡献均应按照上述MIT许可协议进行许可,不附加任何额外条款或条件。
lib.rs
:
安全地将字节切片从/到内置基本数值类型的切片进行转换。
这里提供的特质允许在字节切片和基本数值类型(如整数和浮点数)的切片之间进行安全转换。在转换过程中,会进行检查以确保输出切片可以安全使用:输入切片必须适当地对齐以适应输出类型,并且包含整数个值。
与仅处理切片不同,特性在不可变情况下工作于AsRef<[T]>
,在可变情况下则工作于AsMut<[T]>
。因此,可以直接对例如Vec<T>
和Box<[T]>
进行处理。
输出切片的内容将与输入切片进行位运算等价,因此需要特别注意字节序。
切片示例
use byte_slice_cast::*;
let slice = [0x0102u16, 0x0304u16, 0x0506u16];
let converted_slice = slice.as_byte_slice();
if cfg!(target_endian = "big") {
assert_eq!(converted_slice, &[1, 2, 3, 4, 5, 6]);
} else {
assert_eq!(converted_slice, &[2, 1, 4, 3, 6, 5]);
}
let converted_back_slice = converted_slice.as_slice_of::<u16>().unwrap();
assert_eq!(converted_back_slice, &slice);
可变切片示例
use byte_slice_cast::*;
let mut slice = [0u32; 1];
let mut converted_slice = slice.as_mut_byte_slice();
converted_slice.copy_from_slice(&[0x12, 0x34, 0x56, 0x78]);
let mut converted_slice = converted_slice.as_mut_slice_of::<u16>().unwrap();
converted_slice[0] = 0xffff;
if cfg!(target_endian = "big") {
assert_eq!(&slice, &[0xffff5678]);
} else {
assert_eq!(&slice, &[0x7856ffff]);
}