#hex-dump #hex #io #dump #streamed

bin+lib kex

控制台应用程序,用于流式十六进制转储

17 个版本

0.2.6 2023 年 7 月 1 日
0.2.5 2023 年 7 月 1 日
0.2.4 2023 年 6 月 28 日
0.1.9 2023 年 6 月 19 日

#495 in 解析器实现

26 每月下载量
用于 schnauzer

Apache-2.0

55KB
1.5K SLoC

kex

Crates.io Documentation

流式十六进制转储库。

功能

  • 流式 I/O。
  • 与输出一起工作,实现 Write 特性。
  • 可自定义的格式化
  • 行去重
  • 非常快

演示

demo

二进制

简短指南

# Example
kex -a h8 -b h -g 8/2 -s 40 -n 10 file1 file2 file3 ...

将按顺序打印指定的文件作为单个流。如果没有指定文件,程序将期望从 stdin 获取输入。

参数

-a <format>[min_width] - 地址格式。 (默认为 h8)

<format> - 地址表示。接受值

  • h - 十六进制
  • b - 二进制
  • d - 十进制
  • o - 八进制

<min_width> - 显示地址的最小宽度。除了十进制外,所有值都将用零填充。十进制用空格填充

-b <format> - 原始数据的格式 (默认为 h)

<format> - 字节表示。接受值

  • h - 十六进制
  • b - 二进制
  • d - 十进制
  • o - 八进制
  • c - ASCII 字符。 (不包括字符/第三列)
  • C - 符号表示法 + ASCII 字符。 (不包括字符/第三列)

-g group_size[/number_of_groups] (默认为 8/2)

-g bytes_per_row

-s num_of_bytes_to_skip (默认为 0)

-n num_of_bytes_to_rear (如果未指定将读取数据直到EOF)

示例

以下是一个示例

use kex::*;
use std::fs::File;
use std::io::stdout;
use std::io::{Read, Write};

fn main() {

    let mut buf = [0u8; 4096];

    // let stdin = std::io::stdin();
    // let mut handle = stdin.lock();

    let config = Config::new(
        Some(AddressFormatter::new(AddressStyle::Hex(16), Default::default())),
        ByteFormatter::new(Groupping::RepeatingGroup(Group::new(4, " "), 4), false, Default::default()),
        Some(CharFormatter::default()),
        true,
    );
    let mut printer = Printer::new(stdout(), 0, config);
    
    let mut file = File::open("/bin/cat").expect("Can't open file");

    while let Ok(size) = file.read(&mut buf) {
        if size == 0 {
            break;
        }
        assert!(printer.write_all(&mut buf[..size]).is_ok());
    }

    printer.finish();
}


请参阅crate根目录下examples目录中的所有示例

去重

0000000000000000 cafebabe 00000002 01000007 00000003 |................|
0000000000000010 00004000 000111c0 0000000e 0100000c |..@.............|
0000000000000020 80000002 00018000 0000d0f0 0000000e |................|
0000000000000030 00000000 00000000 00000000 00000000 |................|
*
0000000000004000 cffaedfe 07000001 03000000 02000000 |................|
0000000000004010 11000000 08060000 85002000 00000000 |.......... .....|
0000000000004020 19000000 48000000 5f5f5041 47455a45 |....H...__PAGEZE|
0000000000004030 524f0000 00000000 00000000 00000000 |RO..............|

自定义格式化

       0🤩deadbeef#deadbeef#deadbeef#deadbeef 💥................💨
*
      32🤩deadbeef#deadbeef#43757374#6f6d2070 💥........Custom p💨
      48🤩72696e74#696e67fe#edfafeed#fafeedfa 💥rinting.........💨
      64🤩feedfafe#edfafeed#fafeedfa#feedfafe 💥................💨
      80🤩edfafeed#fafeedfa*
      88🤩

错误报告或功能请求

https://github.com/Arsynth/kex/issues

依赖项

~585KB