`wc -c` 给出了意想不到的结果?

`wc -c` 给出了意想不到的结果?

我有一个 .log 文件,它是一个二进制文件 (BSC0000.log)。因此,在 HEX 查看器 (OKteta) 中查看它,并将其直接导出到字符串 (split_space.txt)。中间有空格 00 DF 00 45

问题是,当我计算两个文件中的字符时,显示出巨大的差异。

laksith@laksithPC:~/Desktop/test$ cat split_space.txt | wc -c
31617470
laksith@laksithPC:~/Desktop/test$ cat BSC0000.log | wc -c
10539157

猜测可能是因为中间有空格,但其实应该是10539157+10539157/2,怎么会是31617470这个值呢?

但 10539157 * 3 = 31617471 是命令行中的值 +1

答案1

一个字节有 8 位。由于十六进制使用 16 个字符(0-9a-f),因此每个字符只能显示 4 位。 需要两个十六进制字符来显示一个字节。 除此之外,十六进制显示中的大多数字符后面都有一个空格,您就会明白为什么十六进制显示占用的字节数是二进制文件的三倍。

例子

让我们创建一个包含单个字节的文件:

$ printf 'a' >afile
$ wc afile
0 1 1 afile

现在,让我们用以下方式显示它,例如hexdump -C

$ hexdump -C afile
00000000  61                                                |a|
00000001

a字符是 ASCII 字符61(十六进制)。文件中的单个字节需要两个字符才能以十六进制显示(如果十六进制后面有空格,则需要三个字符)。

相关内容