我正在做
#[no_mangle]
pub extern "C" fn receiveBufferAndPrint(buffer: *const u8, size: usize)
{
for i in 0..size {
println!("{}", unsafe { *buffer.offset(i as isize) });
}
}
uint8_t*
从C接收缓冲区
将缓冲区转换为Rust对象的最佳方法是什么?我需要在Rust上安全地处理缓冲区,但是我不想将缓冲区元素逐个复制到新的Rust对象中,我想将其包装到Rust对象中,当它超出范围时会删除它。
如果C为您提供了缓冲区,请使用std::slice::from_raw_parts
,然后可以将该切片复制到,Vec<T>
或者Box<[T]>
如果要保留数据。
如果C传递了缓冲区的所有权(即,它是堆分配的,而C不会释放它),则可以使用c_vec crate来确保正确释放了它(使用libc::free()
代替Rust自己的分配器)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句