ben*_*nji 3 casting slice rust
我目前最好的努力是
// `value` is a `&[u8]`
let v = unsafe { slice::from_raw_parts(value.as_ptr() as *const i8, value.len()) };
Run Code Online (Sandbox Code Playgroud)
需要这个似乎有点过分了unsafe。我希望这是零成本。
您的代码已经是零成本了。但它必须在底层使用不安全的代码,因为编译器通过slice::from_partsor完成时并不能保证所有类型的切片转换都是安全的mem::transmute。无论哪种“安全”函数适合此处,都可能会包含该函数,同时确保项目类型与此转换兼容(即相同的大小和内存对齐)。
您可能会找到多个可以对此转换进行适当测试和维护的板条箱。该板条箱safe-transmute实现了这种转换,同时支持更多的绑定防护和对齐检查(免责声明:我是合作者之一)。
use safe_transmute::transmute_many_pedantic;
let value: &[u8] = &[0x00, 0x01, 0x12, 0x24, 0x00];
let words: &[i8] = transmute_many_pedantic(values)?;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
704 次 |
| 最近记录: |