簡體   English   中英

在 Rust 中將 C 指針轉換為結構

[英]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_ptr1my_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM