【发布时间】:2017-07-21 04:48:11
【问题描述】:
我有一个 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,
}
我可以将它们声明为 或者整个事情需要是某种具有单个字段的位集,然后我将它们位屏蔽掉?bools 吗?
例如pub flag_bits: ::libc::c_uint,
【问题讨论】:
-
我认为 bool 是 1 字节而不是 1 位。
-
你看this crate了吗?
-
flag_a和flag_b将如何表示? 仅在 C 语言中没有标准的位字段表示方式,更不用说标准的跨语言表示了。如果您完全关心可移植性 - 即使在完全相同的系统上的不同编译器之间 - 你不要使用位字段。 -
@AndrewHenle - 我对位域了解不多,我正在尝试与使用它们的现有代码(nginx 内部)进行互操作。谢谢。
标签: c struct rust bit-fields