gpt4 book ai didi

c# - 帮助进行字节移位

转载 作者:行者123 更新时间:2023-12-02 13:37:09 25 4
gpt4 key购买 nike

我需要对文本文件进行字节移位。我对 perl 一无所知,但我在 perl 中发现了一段完美工作的代码,名为 moz-byteshift.pl (documentation)。这正是我想要做的,但我需要用 C# 来完成。

这是 perl 文件的源代码:

#!/usr/bin/perl

# To perform a byteshift of 7
# To decode: moz-byteshift.pl -s -7 <infile >outfile
# To encode: moz-byteshift.pl -s 7 <infile >outfile

# To perform a byteshift of 13
# To decode: moz-byteshift.pl -s -13 <infile >outfile
# To encode: moz-byteshift.pl -s 13 <infile >outfile

use encoding 'latin1';
use strict;
use Getopt::Std;

use vars qw/$opt_s/;

getopts("s:");
if(!defined $opt_s) {
die "Missing shift\n";
}

my $buffer;
while(1) {
binmode(STDIN, ":raw");
my $n=sysread STDIN, $buffer, 1;
if($n == 0) {
last;
}
my $byte = unpack("c", $buffer);
$byte += 512 + $opt_s;
$buffer = pack("c", $byte);
binmode(STDOUT, ":raw");
syswrite STDOUT, $buffer, 1;
}

如果有人至少可以解释 perl 脚本是如何工作的,那就太好了。 C# 中的等效示例代码会更好。 =)

感谢您的帮助。

最佳答案

没什么可说的。它一次读取一个字节,将每个字节的值调整为任意值(通过 -s 标志指定),然后写出调整后的字节。它是文本文件 ROT-13 加密的二进制等价物。

其余的细节特定于 Perl 如何做这些事情。 getopts() 是一个处理命令行开关的函数(来自 Getopt::Std 模块)。 binmode() 将文件句柄置于原始模式,以绕过 Perl 在 I/O 期间通常执行的任何操作。 sysread() 和 syswrite() 函数用于低级流访问。 pack()和unpack()函数用于读写二进制数据; Perl 不支持 native 类型。

这在 C 中重新实现是微不足道的。我建议这样做(如果需要的话从 C# 绑定(bind)到它)而不是直接移植到 C#。

关于c# - 帮助进行字节移位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/866859/

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