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
我有一个名为 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