![]() |
1
4
没什么好说的。它一次读取一个字节的文件,将每个字节的值调整为任意值(通过-s标志指定),然后写出调整后的字节。它是文本文件的ROT-13加密的二进制等价物。 其余的细节是特定于Perl如何做这些事情的。getopts()是一个处理命令行开关的函数(来自Getopt::Std模块)。binmode()将文件句柄置于原始模式,以绕过Perl在I/O期间通常执行的任何魔术。sysread()和syswrite()函数用于低级流访问。pack()和unpack()函数用于读取和写入二进制数据;Perl不执行本机类型。 在C中重新实现这一点很简单。我建议这样做(如果需要,从C绑定到它),而不是直接移植到C。 |
![]() |
2
1
从其他答案来看,C#中的等价物看起来是这样的:
|
![]() |
3
1
代码的作用是:从标准输入中逐个读取每个字节(在将其切换到原始模式后,这样就不会发生转换)。解包获取刚刚读取的字符的字节值,以便“0”读取变为0x30。选择拉丁1编码,以使转换一致(例如,参见 http://www.cs.tut.fi/~jkorpela/latin9.html ). 然后,命令行中使用-s选项指定的值与512一起添加到此字节,以模拟模运算。这样,-s0,-s256等是等效的。我不知道为什么需要这样做,因为我会假设下面的包已经处理好了,但我认为他们一定有很好的理由把它放在那里。 然后,将原始字节写入标准输入。 下面是在包含字符012345的文件上运行它时发生的情况(我将数据放在 数据 第节):
每个字节值递增一。
记住257%256=1。即:
很久以后:好吧,我不知道C#但是这里是我能够使用在线文档拼凑起来的东西。了解C#的人应该解决这个问题:
|