Rust 有没有一种方便的方法可以在结构或其他语言功能中表示x86指令?
Rust没有“位”数据类型,但是x86指令有一个“字段”,大小为位。是否有任何数据结构可以直接编译为x86指令集或任何二进制协议所需的“内存/字节对齐”,而不是使用逐位操作 操作码1or2字节 Mod-R/M 0或1字节 Mod 7,6位 寄存器/操作码5,4,3位 R/M 2,1,0位 SIB 0或1字节 SS 7,6 指数5,4,3 基数2,1,0 位移0,1,2或4字节 立即0、1、2或4 有没有可以直接编译的数据结构 不,没有与此对应的结构: 操作码1or2字节 也就是说,结构的值不能小于或等于一个或两个字节长。结构在编译时具有固定的大小 你的主要选择是:Rust 有没有一种方便的方法可以在结构或其他语言功能中表示x86指令?,rust,Rust,Rust没有“位”数据类型,但是x86指令有一个“字段”,大小为位。是否有任何数据结构可以直接编译为x86指令集或任何二进制协议所需的“内存/字节对齐”,而不是使用逐位操作 操作码1or2字节 Mod-R/M 0或1字节 Mod 7,6位 寄存器/操作码5,4,3位 R/M 2,1,0位 SIB 0或1字节 SS 7,6 指数5,4,3 基数2,1,0 位移0,1,2或4字节 立即0、1、2或4 有没有可以直接编译的数据结构 不,没有与此对应的结构: 操作码1or2字节 也就是说,结构的值不
struct指令([u8;4])
的代码,并实现使用位运算的方法。这将允许您匹配位模式Read
和Write
的类型解析回字节
<> P>还有可能对比特字段感兴趣,比如这个C++例子:
struct S {
unsigned int b : 3;
};
在Rust中没有直接的支持,但是一些板条箱似乎支持宏来创建它们。也许这会很有用。Rust确实有一个“bit”数据类型,它被称为“boolean”。你的问题很不清楚。你想干什么?你是在读还是写二进制格式?对不起,我不知道rust boolean的大小只有一位,我的英语也很粗糙,我正在读或生成二进制格式,对。你能谈谈rust中的布尔类型吗?捕捉rust的本质。Johnny我认为@WesleyWiser的意思不是rust中的布尔值是一个字节长的1/8,而是它存储一位信息(要么是真的,要么是假的)。是的,它是完全有帮助的,说到时尚,我不喜欢“include”(在文件系统级别上操作),而且我刚从那里得知C++可以声明性地做比特格式,我认为HLL中的每个声明性都是好的,这是一个很好的答案。使用抽象表示(如果您需要一位,请将其表示为一位信息而不是大小),然后根据需要序列化/反序列化为物理格式更容易。