#转换 #大小 #对齐 #强制类型转换 #原地 #类型 #强制类型转换

强制类型转换

相同大小和对齐的类型之间的原地强制类型转换

1 个不稳定版本

0.1.0 2019年5月1日

#6 in #强制类型转换

MIT/Apache

13KB
332

强制类型转换

原地类型转换。


lib.rs:

相同大小和对齐的类型之间的原地转换。

示例

use coercion::{Coerce, As};

let u8_slice: Box<[u8]> = vec![1,0,1,0].into_boxed_slice();

// Safe because true as u8 == 1
let bool_slice: Box<[bool]> = unsafe { u8_slice.coerce() };

assert_eq!(&bool_slice[..], &[true, false, true, false]);

// Don't need unsafe, because any bool is a valid u8
let u8_slice: Box<[u8]> = bool_slice.as_();
assert_eq!(&u8_slice[..], &[1,0,1,0]);

CoerceAs 实现了对 str 的支持

use coercion::{Coerce, As};

let boxed_str = Box::<str>::from("Hello World!");

let boxed_bytes = boxed_str.as_();
assert_eq!(&boxed_bytes[..], b"Hello World!");

let boxed_str: Box<str> = unsafe { boxed_bytes.coerce() };
assert_eq!(&*boxed_str, "Hello World!");

无运行时依赖

功能