gpt4 book ai didi

linux - 使用gunzip计算一个字符串的crc32码

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:26:30 29 4
gpt4 key购买 nike

全部。

我想用gunzip来计算一个字符串的crc32码。

字符串:测试字符串

此命令运行良好:
echo -n teststring | gzip -f > /tmp/filename && gunzip -lv /tmp/filename && rm -f /tmp/filename

但是这个命令不起作用:
echo -n teststring | gzip -f | gunzip -lv

我搜索了所有 gunzip 手册,发现“如果压缩文件位于不可搜索的媒体上,--list 选项报告大小为 -1,crc 报告为 ffffffff。”,我想知道为什么标准输出是不可搜索的媒体?怎样才能让这个命令正常运行?

更新:

这行不通:

cat /tmp/filename | gunzip -lv

这很好用:

gunzip -lv < /tmp/filename

你能告诉我这两个命令之间的区别吗?谢谢!

最佳答案

当您通过管道传输时,接收可执行文件的输入是不可搜索的。因此,您遇到了问题。

相反,您可以提取倒数第​​二个四个字节,即 crc:

% echo -n teststring | gzip -1 | tail -c 8 | head -c 4 | hexdump -e '1/4 "%08x" "\n"'
1f58f83e

或者你可以使用 pigz (恰好不尝试搜索列表的 gzip 并行版本):

% echo -n teststring | gzip -1 | pigz -lv
method check timestamp compressed original reduced name
gzip 8 1f58f83e Jul 19 01:35 12 10 -20.0% <stdin>

一般来说,这是一种相当低效的计算 crc 的方法,因为 gzip 做的压缩工作比计算 crc 多得多。 (我在上面加入了-1 选项来最小化压缩工作,但它仍然很多。)你应该简单地编写一个简短的程序来计算crc。您的 Linux 机器几乎肯定有可用的 zlib 库。尝试包含 zlib.h 并使用 -lz 进行链接。您可以阅读 zlib.h 了解如何使用 crc32() 函数。

注释中建议的cksum 命令可用于计算不同的crc。如果你想要的只是任何 crc,那么你可以使用它。如果你想要 gzip、zip、png 等使用的 crc,那么你需要使用 zlib 中的 crc32() 例程,或等效的例程。

关于linux - 使用gunzip计算一个字符串的crc32码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11553941/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com