如何在Rust中表示这种代码?
uint8_t pmport:4;
uint8_t rsv0:3;
uint8_t c:1;
Run Code Online (Sandbox Code Playgroud)
我想将这3个值打包成一个u8.如何在Rust中实现这一目标?
Rust没有C语言中内置的位字段.但是,您可以使用像bitfield这样的箱子来实现同样的目的.该bitfield宏允许您定义的类型,大小和存取方法每个位字段.
#[macro_use] extern crate bitfield;
bitfield! {
struct Example(u8);
u8;
get_pmport, set_pmport: 3, 0; // bits 0-3
get_rsv0, set_rsv0: 6, 4; // bits 4-6
get_c, set_c: 7, 7; // bit 7
}
fn main() {
println!("size of Example: {}", ::std::mem::size_of::<Example>());
let mut e = Example(0);
println!("pmport: {}, rsv0: {}, c: {}", e.get_pmport(), e.get_rsv0(), e.get_c());
e.set_pmport(5);
println!("pmport: {}, rsv0: {}, c: {}", e.get_pmport(), e.get_rsv0(), e.get_c());
e.set_rsv0(3);
println!("pmport: {}, rsv0: {}, c: {}", e.get_pmport(), e.get_rsv0(), e.get_c());
e.set_c(1);
println!("pmport: {}, rsv0: {}, c: {}", e.get_pmport(), e.get_rsv0(), e.get_c());
e.set_rsv0(0);
println!("pmport: {}, rsv0: {}, c: {}", e.get_pmport(), e.get_rsv0(), e.get_c());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
157 次 |
| 最近记录: |