CRC32 在文件和文本上执行时不同

CRC32 differs when executed on file vs text

我有一个名为 hello.txt 的文件,其中包含以下内容:

hello

当我像这样在该文件上执行 linux crc32 时:(我通过 sudo apt install libarchive-zip-perl 安装)

crc32 hello.txt

我得到:

363a3020

当我想使用一些在线计算器或 npm 库(来自 node.js 的 crc)时,我只在文本上执行它并得到以下结果:

3610a686

这是不同的。我如何检查才能使结果相同?这里有什么区别?有人可以解释一下吗?

看起来您是通过 运行 创建文件的:

echo hello > hello.txt

echo 命令附加了一个换行符,因此该文件的内容实际上是hello<newline>。我们可以用 hexdump 工具看到,例如:

$ od --endian=big -x hello.txt
0000000 6865 6c6c 6f0a
0000006

或者只计算字节数:

$ wc -c hello.txt
6 hello.txt

这里我们看到它是 6 个字节,而不是预期的 5 个字节。如果我们抑制终端换行符:

echo -n hello > hello.txt

然后我们得到预期的crc:

$ crc32 hello.txt
3610a686