#utility #read #ability #cargo-toml

字节码

此库提供了读取字节码的能力。

4个版本 (2个重大更新)

0.3.0 2022年11月17日
0.2.0 2022年11月17日
0.1.1 2022年11月16日
0.1.0 2022年11月16日

#491 in 编程语言

MIT 许可证

28KB
297 代码行

字节码

此库提供了读取字节码的能力。

用法

将此添加到您的 Cargo.toml

bytecode = "0.1.0"

并在此添加到您的源代码中

use bytecode::ByteCode;

示例

use bytecode::ByteCode;

fn main() {
    {
        let mut bytes = ByteCode::new(&[0, 1, 2, 3, 4, 5, 6, 7]);

        bytes += 3;

        let _first = bytes[0];
        let _second = bytes[1];

        let _subslice = &bytes[2..5];
    }

    {
        let mut bytes = ByteCode::new(&[0, 1, 2, 3, 4, 5, 6, 7]);

        match bytes.peek(3) {
            // omitted
            _ => {}
        }

        if bytes.starts_with("foo".as_bytes()) {
            // omitted
        }

        bytes.skip(2);

        let _subslice = bytes.take(4);
    }

    {
        let mut bytes = ByteCode::new(&[0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x66, 0x6f, 0x6f]);

        let _u8 = bytes.take_into_u8();   //  u8::MAX
        let _u16 = bytes.take_into_u16(); // u16::MAX
        let _u32 = bytes.take_into_u32(); // u32::MAX

        let _string = bytes.take_into_string(3); // "foo".to_owned()
    }
}
use std::fs::File;
use std::io::Read;

use bytecode::ByteCode;

fn main() {
    let mut f = File::open("./examples/puts.mrb").unwrap();
    let mut buffer = Vec::new();
    f.read_to_end(&mut buffer).unwrap();

    let mut mrb = ByteCode::new(&buffer);

    let _header = mrb.take(20);
    dbg!(&mrb);
}

examples/debug.png

许可证

bytecode 在MIT许可证下发布。

依赖项