带位域的 C 风格结构如何在 Rust #[repr(C)] 结构中表示?
How does a C-style struct with a bitfield get represented in a Rust #[repr(C)] struct?
我有一个 C 结构定义为:
struct my_c_s {
u_char *ptr;
unsigned flag_a:1;
unsigned flag_b:1;
int some_num;
}
如何表示 flag_a
和 flag_b
?
#[repr(C)]
pub struct my_rust_s {
pub ptr: *const u_char,
//pub flag_a: ?,
//pub flag_b: ?,
pub some_num: ::libc::c_int,
}
我可以将它们声明为 bool
s 吗? 或者整个事情是否需要是某种具有单个字段的位集,然后我进行位掩码他们出去了?
例如pub flag_bits: ::libc::c_uint,
不,你不能。
有an open issue about supporting bitfields, which doesn't seem to be active. In the issue, @retep998 explains how bitfields are handled in winapi
个。如果您需要在 C 接口中处理位域,这可能会有所帮助。
OP似乎是针对C互操作的,但如果你只需要位域功能,有几种解决方案。
我有一个 C 结构定义为:
struct my_c_s {
u_char *ptr;
unsigned flag_a:1;
unsigned flag_b:1;
int some_num;
}
如何表示 flag_a
和 flag_b
?
#[repr(C)]
pub struct my_rust_s {
pub ptr: *const u_char,
//pub flag_a: ?,
//pub flag_b: ?,
pub some_num: ::libc::c_int,
}
我可以将它们声明为 或者整个事情是否需要是某种具有单个字段的位集,然后我进行位掩码他们出去了?bool
s 吗?
例如pub flag_bits: ::libc::c_uint,
不,你不能。
有an open issue about supporting bitfields, which doesn't seem to be active. In the issue, @retep998 explains how bitfields are handled in winapi
个。如果您需要在 C 接口中处理位域,这可能会有所帮助。
OP似乎是针对C互操作的,但如果你只需要位域功能,有几种解决方案。