#formatter #binary #hex #binary-data

rorschach

二进制数据定义和格式化器

4 个版本

使用旧 Rust 2015

0.1.3 2016 年 8 月 11 日
0.1.2 2016 年 4 月 26 日
0.1.1 2016 年 4 月 22 日
0.1.0 2016 年 4 月 19 日

#160#hex

WTFPL 许可证

22KB
711

罗夏测试

根据常见的布局定义格式化二进制数据。

示例

use rorschach::{Definition, Field, LittleEndian};
use rorschach::formatter::{self, Color};

let def = Definition::default()
  .field(Field::named("sequence")
  	.is::<u32>(LittleEndian)
  	.style(Color::Fixed(255).normal()))
  .field(Field::named("buttons")
  	.bytes(3)
  	.binary()
  	.style(Color::Fixed(3).normal()))
  .field(Field::named("trigger.left")
  	.is::<u8>(LittleEndian)
  	.style(Color::Fixed(255).on(Color::Fixed(63)).underline()))
  .field(Field::named("trigger.right")
  	.is::<u8>(LittleEndian)
  	.style(Color::Fixed(255).on(Color::Fixed(63))))
  .field(Field::padding()
  	.bytes(3))
  .field(Field::named("pad.left.x")
  	.is::<i16>(LittleEndian)
  	.style(Color::Fixed(255).on(Color::Fixed(27)).underline()))
  .field(Field::named("pad.left.y")
  	.is::<i16>(LittleEndian)
  	.style(Color::Fixed(27).normal()))
  .field(Field::named("pad.right.x")
  	.is::<i16>(LittleEndian)
  	.style(Color::Fixed(255).on(Color::Fixed(36)).underline()))
  .field(Field::named("pad.right.y")
  	.is::<i16>(LittleEndian)
  	.style(Color::Fixed(36).normal()))
  .field(Field::padding()
  	.bytes(12))
  .field(Field::named("acceleration.pitch")
  	.is::<i16>(LittleEndian)
  	.style(Color::Fixed(124).normal()))
  .field(Field::named("acceleration.yaw")
  	.is::<i16>(LittleEndian)
  	.style(Color::Fixed(160).normal()))
  .field(Field::named("acceleration.roll")
  	.is::<i16>(LittleEndian)
  	.style(Color::Fixed(196).normal()))
  .field(Field::named("orientation.pitch")
  	.is::<i16>(LittleEndian)
  	.style(Color::Fixed(57).normal()))
  .field(Field::named("orientation.yaw")
  	.is::<i16>(LittleEndian)
  	.style(Color::Fixed(93).normal()))
  .field(Field::named("orientation.roll")
  	.is::<i16>(LittleEndian)
  	.style(Color::Fixed(129).normal()))
  .field(Field::padding()
  	.bytes(16));

结构化

结构化格式化器从网络相关 RFC 中常用的 ASCII 艺术表格中获得灵感。

formatter::Structured::default()
  .header(true)
  .style(Default::default())
  .format(&def, buffer, io::stdout())
  .unwrap()

Structured Screenshot

内联

内联格式化器是最简单的格式化器,它只是将字节按十六进制顺序打印出来,但同时也支持彩色输出,这有助于格式反转。

formatter::Inline::default()
  .newline(true)
  .split(4)
  .style(Default::default())
  .format(&def, buffer, io::stdout())
  .unwrap()

Inline Screenshot

依赖项

~235KB