#byte-slice #numeric #cast #numbers #safely #type #safe

无std byte-slice-cast

安全地将字节切片从/到内置基本数值类型的切片进行转换

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模式

Download history 157949/week @ 2024-03-14 166605/week @ 2024-03-21 159464/week @ 2024-03-28 173939/week @ 2024-04-04 171077/week @ 2024-04-11 166290/week @ 2024-04-18 151954/week @ 2024-04-25 158496/week @ 2024-05-02 156790/week @ 2024-05-09 154412/week @ 2024-05-16 159590/week @ 2024-05-23 163111/week @ 2024-05-30 149806/week @ 2024-06-06 156114/week @ 2024-06-13 160389/week @ 2024-06-20 128759/week @ 2024-06-27

每月623,157次下载
用于 1,993 个crate (43个直接使用)

MIT 许可协议

34KB
729

byte-slice-cast crates.io Actions状态 docs.rs

在字节切片和另一个内置基本数值类型的切片之间进行安全转换。

许可协议

byte-slice-cast遵循MIT许可协议(LICENSEhttp://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]);
}

无运行时依赖

特性