[英]Casting a C pointer to a struct, in Rust
我在 C 中有一個庫的 Rust 綁定,但它們並不完整。
在 C 代碼中,我定義了一個簡化的宏,如下所示:
#define MY_MACROS1(PTR) (((my_struct1 *) (PTR))->field1.field2 >> 2)
我需要在 Rust 中實現相同的目標。
我有my_struct1
的 Rust 綁定定義。 我有一個指針
let my_ptr1: usize = unsafe { get_a_pointer_from_c(); }
如何將指針my_ptr1
為my_struct1
或更確切地說是my_struct1 *
?
Rust 綁定到get_a_pointer_from_c()
返回一個usize
類型的指針,注意。
選項 1 是 Ôrel 建議的:讓 C 側將正確的訪問器公開為 function,並從 Rust 調用它。
選項 2 是在 Rust 側定義 C 結構,並將指針轉換為 Rust 側的指針/引用,例如
let mut p; let r = unsafe { p = ptr::NonNull::new( get_pointer_from_c() as *mut YourType ).unwrap(); p.as_mut() };
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.