通过#[!no_std]在C和Rust之间使用FFI传递数组

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

1
我在你的问题中添加了[rust-no-std]标签,并需要删除[pointers]标签,因为在我的编辑后,该问题将超过五个标签限制。如果你认为[pointers]标签比[rust-no-std]更相关,请随意恢复(但请注意,我还修正了一个拼写错误 - 无论如何,你可能不想恢复编辑的这部分)。 - Elias Holzmann
@EliasHolzmann 谢谢,[rust-no-std] 标签正是我应该使用的,只是我之前不知道它。 - Cactus
1个回答

6

尽管在no_std环境中不支持std::slice::from_raw_parts函数,但是core::slice::from_raw_parts函数可以使用,因此您可以直接使用它。

一般来说,在no_std环境中,任何不涉及I/O、堆分配等与平台相关的功能的std函数都应该通过core crate进行可用性支持。


2
另外,自 Rust 2018 起,您还可以在非 no_std 的 crate 中使用 corestd::slice::from_raw_parts 只是对 core::slice::from_raw_parts 的别名,因此可以始终直接使用它。 - Tim Diekmann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接