如何在 C# 中复制 Perl 的解包功能?
我正在尝试在 C# 中重新创建 Perl 脚本,但在创建目标系统所需的校验和值时遇到问题。
在 Perl 中,此校验和是使用 unpack
函数计算的:
while (<PACKAGE>) {
$checksum += unpack("%32C*", $_);
}
$checksum %= 32767;
close(PACKAGE);
其中 PACKAGE
是 .tar 文件输入流
我需要在 C# 中复制它,但找不到复制方法unpack
函数。
感谢所有帮助!
(我知道有更好的校验和计算可用,但无法更改目标系统,因此无法更改计算)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
Mono 中似乎有一个名为 DataConvert 的库,它的编写目的是提供类似于 Perl 包的功能/解压。 这能满足您的需要吗?
There seems to be a library in Mono called DataConvert that was written to provide facilities similar to Perl's pack/unpack. Does this do what you need?
Perkl 的解包在此处和此处。 由此您应该能够用 C# 编写等效的代码。
Perkl's unpack is described here and here. From that you should be able to write an equivalent in C#.
为了补充 Mitch Wheat 的评论,这里有一个 Java 实现(仅执行单个块)。 我相信您会找到一种方法将其转换为 C#,并执行多个块。
希望这可以帮助!
To supplement Mitch Wheat's comment, here's a Java implementation (which does a single block only). I'm sure you'll find a way to convert it into C#, and to do multiple blocks.
Hope this helps!
在我的测试中,使用 %32C 解包似乎是字节的加和,限制为 32 位。
重现这一点应该不难。
In my testing here, unpack with %32C appears to be the additive sum of the bytes, limited to 32 bits.
It shouldn't be hard to reproduce that.
根据 Chris Jester-Young 和 piCookie 的评论,我开发了以下功能。 希望对你有帮助。
Based on the comments of Chris Jester-Young and piCookie, I developed the following function. I hope you find it useful.