1 个不稳定版本
0.1.0 | 2024年5月21日 |
---|
#927 在 数据结构
每月286次下载
11KB
293 行
intsplit
Rust库,用于将数值类型分割成二进制组成部分数组。
示例
use intsplit::*;
#[test]
fn example() {
let number : u32 = 0x0A0B0C0Du32;
let u16_components: [u16; 2] = number.as_u16_array();
assert_eq!([0x0C0Du16, 0x0A0Bu16], u16_components);
}
实现的转换
此库使用没有不安全代码(仅在测试中)来实现转换。Rust编译器将识别所有这些操作本质上都是转换,并且会进行类似的优化(在优化构建中)
u16/i16
- as_i8_array -> [i8; 2]
u32/i32/f32
- as_i8_array -> [i8; 4]
- as_i16_array -> [i16; 2]
- as_u16_array -> [u16; 2]
u64/i64/f64
- as_i8_array -> [i8; 8]
- as_i16_array -> [i16; 4]
- as_u16_array -> [u16; 4]
- as_i32_array -> [i32; 2]
- as_u32_array -> [u32; 2]
- as_f32_array -> [f32; 2]
u128/i128
- as_i8_array -> [i8; 16]
- as_i16_array -> [i16; 8]
- as_u16_array -> [u16; 8]
- as_i32_array -> [i32; 4]
- as_u32_array -> [u32; 4]
- as_f32_array -> [f32; 4]
- as_i64_array -> [i64; 2]
- as_u64_array -> [u64; 2]
- as_f64_array -> [f64; 2]
注意字节序
请注意,结果始终等同于将 to_ne_bytes() 的结果转换为相应的数组。本读数中提供的示例在大小端目标上可能无法正常工作,因为这会交换断言语句中的 2 个 u16 值,就像将 to_ne_bytes() 的结果 mem::transmute 时,在大小端上不会产生相同的结果。