使用 #[!no_std] 通过 FFI 将数组从 C 传递到 Rust

Cac*_*tus 4 c arrays ffi rust rust-no-std

这个关于将数组从 C 传递到 Rust 的问题的所有答案都std::slice::from_raw_parts用于将原始 C 指针和一些长度信息转换为 Rust。在嵌入式环境中(在我的例子中是MOS 6502),可能没有可用的std库。那么#![no_std]上下文中,将数组从 C 传递到 Rust 以进行(可能可变的)处理的最佳方式是什么?

sk_*_*ant 5

std::slice::from_raw_parts在不可用no_std的环境,可用的,所以你可以简单地使用。core::slice::from_raw_parts

一般来说,任何std不依赖于平台的东西(因此,不是 I/O、堆分配等)也应该no_std通过corecrate在环境中可用。

  • 此外,从 Rust 2018 开始,您还可以在非 `no_std` 板条箱中使用 `core`。`std::slice::from_raw_parts` 只是`core::slice::from_raw_parts` 的别名,可以直接**一直使用**。 (2认同)