mar*_*hon 3 c struct rust bit-fields
我有一个C结构定义为:
struct my_c_s {
u_char *ptr;
unsigned flag_a:1;
unsigned flag_b:1;
int some_num;
}
Run Code Online (Sandbox Code Playgroud)
怎么会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,
}
Run Code Online (Sandbox Code Playgroud)
我可以将它们声明为 或者整个事情需要是一个具有单个字段的位集合,然后我将它们用位掩码?bools吗?
例如 pub flag_bits: ::libc::c_uint,
不,你不能.
有一个关于支持位域的公开问题,似乎没有激活.在这个问题中,@ retep998解释了如何处理位域winapi.如果您需要处理C接口中的位域,这可能会有所帮助.
OP似乎旨在实现C互操作,但如果您只需要位域功能,则有几种解决方案.
bitfield,根据评论 - 我不知道,但似乎提供C位域等效.bitflags.这似乎适用于基于位的标志,通常enum用C 表示.#[repr(packed)]如果你只想在某种程度上打包字段,忽略对齐.字段仍将与字节边界对齐.bit-vec 如果你需要同质的比特数组.| 归档时间: |
|
| 查看次数: |
1055 次 |
| 最近记录: |