gpt4 book ai didi

在 Rust 中将 C 指针转换为结构

转载 作者:行者123 更新时间:2023-12-03 11:45:15 27 4
gpt4 key购买 nike

我在 Rust 中有 C 语言库的绑定(bind),但它们并不完整。
在 C 代码中,我定义了一个简化的宏,如下所示:

  #define MY_MACROS1(PTR) (((my_struct1 *) (PTR))->field1.field2 >> 2)
我需要在 Rust 中实现同样的目标。
我有 my_struct1 的 Rust 绑定(bind)定义.我有一个指针
  let my_ptr1: usize = unsafe { get_a_pointer_from_c(); }
如何转换指针 my_ptr1my_struct1或者更确切地说是 my_struct1 * ?
Rust 绑定(bind)到 get_a_pointer_from_c()返回 usize 类型的指针, 笔记。

最佳答案

  • 选项 1 是 Ôrel 建议的:让 C 端将适当的访问器公开为函数,并从 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()
    };
  • 关于在 Rust 中将 C 指针转换为结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62549247/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com