如何获得 FFI 的机器大小的整数?
How do I get machine-sized integer for FFI?
在处理外部代码时,我必须使用指向 C 结构的指针
typedef struct {
int two;
int nd;
char typekind;
...
} PyArrayInterface;
显然 int
的大小未知。我如何用 Rust 表示这个结构?可能是 i32
,但有一天我可能 运行 跨 ILP64 数据模型...
此时我唯一的想法是创建一个枚举来包装结构,在 运行 时检查架构,然后做正确的事情。每次我需要从 C 中获取结构时,都有一个 if
语句和一个 transmute
是相当愚蠢的,但我目前没有更好的东西......
要处理 FFI 类型,您应该使用 libc
crate. You can find it's documentation here。
您需要的两种类型是libc::c_int
和libc::c_char
。
Rust 书中的 This chapter 给出了简洁的介绍,还提到了 c_int
.
在处理外部代码时,我必须使用指向 C 结构的指针
typedef struct {
int two;
int nd;
char typekind;
...
} PyArrayInterface;
显然 int
的大小未知。我如何用 Rust 表示这个结构?可能是 i32
,但有一天我可能 运行 跨 ILP64 数据模型...
此时我唯一的想法是创建一个枚举来包装结构,在 运行 时检查架构,然后做正确的事情。每次我需要从 C 中获取结构时,都有一个 if
语句和一个 transmute
是相当愚蠢的,但我目前没有更好的东西......
要处理 FFI 类型,您应该使用 libc
crate. You can find it's documentation here。
您需要的两种类型是libc::c_int
和libc::c_char
。
This chapter 给出了简洁的介绍,还提到了 c_int
.