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

Lak*_*ith 4 command-line cat wc

我有一个 .log 文件,它是一个二进制文件 (BSC0000.log)。所以在十六进制查看器(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
Run Code Online (Sandbox Code Playgroud)

可以猜测这可能是因为 之间的空格。但是它应该大致像 10539157 + 10539157/2 但是为什么这个值是 31617470。

但是 10539157 * 3 = 31617471 这是来自命令行的值 +1

Joh*_*024 5

一个字节有 8 位。因为 hex 使用 16 个字符,0-9a-f,所以每个字符只能显示 4 位。 显示一个字节需要两个十六进制字符。 再加上十六进制显示中的大多数字符后面都有一个空格,您就会明白为什么十六进制显示占用的字节数是二进制文件的三倍。

例子

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

$ printf 'a' >afile
$ wc afile
0 1 1 afile
Run Code Online (Sandbox Code Playgroud)

现在,让我们显示它,例如hexdump -C

$ hexdump -C afile
00000000  61                                                |a|
00000001
Run Code Online (Sandbox Code Playgroud)

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