OD-V

OD-V

当我将一个 1GB 大文件拆分为包含 777 个事件的文件时,我需要将二进制数据转换为十六进制/八度/任何合适的格式,然后再转换回二进制,每个文件的大小不同,以便每个事件由fafafafahexdump 中的字符串分隔格式(但请注意,telnet 示例中可能不存在此分隔符,因此您可以选择其中的任何字符串进行练习)。受这个答案的启发,我试图了解哪些命令适合于此这里

下面的数据源是telnet的二进制文件,只是一个例子。我在评论输出时有意使用伪级别,而不是让您对细节感到困惑;我有标题及其部分的完整文档,但他们的理解对于此任务来说不是必需的。

OD-V

od -v /usr/bin/telnet | head
0000000 042577 043114 000402 000001 000000 000000 000000 000000
0000020 000003 000076 000001 000000 054700 000000 000000 000000
0000040 000100 000000 000000 000000 073210 000001 000000 000000
0000060 000000 000000 000100 000070 000010 000100 000034 000033
0000100 000006 000000 000005 000000 000100 000000 000000 000000
0000120 000100 000000 000000 000000 000100 000000 000000 000000
0000140 000700 000000 000000 000000 000700 000000 000000 000000
0000160 000010 000000 000000 000000 000003 000000 000004 000000
0000200 001000 000000 000000 000000 001000 000000 000000 000000
0000220 001000 000000 000000 000000 000034 000000 000000 000000

评论

  • 第一个字符串应该是一些标头,但奇怪的是它们来自 2, 4, 6, 10, ... 所以我认为这可能是以后的限制

十六进制转储-v

hexdump -v /usr/bin/telnet | head
0000000 457f 464c 0102 0001 0000 0000 0000 0000
0000010 0003 003e 0001 0000 59c0 0000 0000 0000
0000020 0040 0000 0000 0000 7688 0001 0000 0000
0000030 0000 0000 0040 0038 0008 0040 001c 001b
0000040 0006 0000 0005 0000 0040 0000 0000 0000
0000050 0040 0000 0000 0000 0040 0000 0000 0000
0000060 01c0 0000 0000 0000 01c0 0000 0000 0000
0000070 0008 0000 0000 0000 0003 0000 0004 0000
0000080 0200 0000 0000 0000 0200 0000 0000 0000
0000090 0200 0000 0000 0000 001c 0000 0000 0000

评论

  • 第一个字符串的编号确定
  • so 之间的一些字母可能会成为以后可读性的问题
  • 第一个字符串的大小与后面的四个字母组合的大小不同

十六进制转储-vb

hexdump -vb /usr/bin/telnet | head
0000000 177 105 114 106 002 001 001 000 000 000 000 000 000 000 000 000
0000010 003 000 076 000 001 000 000 000 300 131 000 000 000 000 000 000
0000020 100 000 000 000 000 000 000 000 210 166 001 000 000 000 000 000
0000030 000 000 000 000 100 000 070 000 010 000 100 000 034 000 033 000
0000040 006 000 000 000 005 000 000 000 100 000 000 000 000 000 000 000
0000050 100 000 000 000 000 000 000 000 100 000 000 000 000 000 000 000
0000060 300 001 000 000 000 000 000 000 300 001 000 000 000 000 000 000
0000070 010 000 000 000 000 000 000 000 003 000 000 000 004 000 000 000
0000080 000 002 000 000 000 000 000 000 000 002 000 000 000 000 000 000
0000090 000 002 000 000 000 000 000 000 034 000 000 000 000 000 000 000

命令od -v给了我六个字母的字符串,000000 042577我认为这是八度音阶格式。另一个命令hexdump -v还为我提供了四个字母的字符串,例如,457f 464c但使用一些八度选项hexdump -vo给出了三个字母的单词,例如000000 177 105 ....

以下哪些命令适合对二进制数据进行数据操作,例如使分割变得容易?

答案1

二进制测试数据 1GB,已讨论这里,创建者为

dd if=/dev/urandom of=sample.bin bs=64M count=16

按字节位置分割

请参阅有关此的主题这里。我认为如果字节偏移量是固定的,这是进行分割的最合适的方法。您需要确定前两个事件标头的位置并计算事件的大小。还要考虑最后一个事件标头的尾部,以便您知道何时结束拆分。

xxd

答案在 FloHimself 的评论中。

xxd -ps sample.bin | process | xxd -ps -r

OD-V

在 中od -v,应该根据 StephenKitt 的评论指定输出格式,如下所示

od -v -t x1 sample.bin

给予

0334260    00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
0334300    00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
0334320    00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
0334340    00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
0334360    00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
0334400    00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
0334420    00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
0334440    00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
0334460    00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
0334500    00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
0334520    00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
0334540

这更容易处理。

关于通过 Ascii 通道而不是十六进制/八度通道传递的评论

我认为从二进制到十六进制再转换回二进制就足够了xxd -ps。我这样做了base64 sample.bin | less -s -M +Gg,但我注意到处理和输出速度明显变慢,如下所示

CGgUAMA0GCSqGSIb3DQEBAQUABIIBABR2EFj76BigPN+jzlGvk9g3rYrHiPKNIjKGprJMaB91ATT6gc0Rs3xlEr6Ybzm8NVcxMnR+2chto/oSh85ExuH4Lk8mELHOIZLeAUUr8eFAXKnZ4SBZ6a8Ewr0x/zX 09Bp6IMk18bdVUCT15PT2fbluvJfj7htWCDy0ewm+EU2LIJgkriK8AA0oarqjjK/CIhfglQut fN6QDEp4zqc6tJVqUO7XrEsFlGDOgcPTzeWJuWx31/8MrvEn5HcPzhq+nMI1D6NYjzGhHN08// ObF3z3zthlCDVmowbV161i2LhQ0jy9a/TNyAM0juCR0IF9j7zSyFW0/vvMZYdt5kg1J1EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

相关内容