stackoverflow上的人帮我在Perl中进行了base64解码,但是我希望反过来使用这个脚本:
use strict;
use warnings;
use MIME::Base64;
my $str = 'CS20UumGFaSm0QXZ54HADg';
my @chars = split //, decode_base64 $str;
my @codes = map ord, @chars;
print "@codes\n";
输出= 9 45 180 82 233 134 21 164 166 209 5 217 231 129 192 14
现在我想将输出作为$str
和CS20UumGFaSm0QXZ54HADg
作为输出?
我已经尝试了几个小时,但似乎无法做到。
答案 0 :(得分:2)
#!/usr/bin/perl
use strict;
use warnings;
use MIME::Base64;
my @array = qw(9 45 180 82 233 134 21 164 166 209 5 217 231 129 192 14);
my $str = encode_base64(join '', map chr, @array);
print $str, "\n";
输出:
CS20UumGFaSm0QXZ54HADg==
这在perldoc(强调我的)中有说明:
ord EXPR
ord
返回
EXPR
的第一个字符的数值。如果EXPR
为空字符串,则返回0
。如果省略EXPR
,请使用$_
。 (注意字符,而不是字节。)反过来,请参阅
chr
。有关Unicode的更多信息,请参阅perlunicode。
答案 1 :(得分:1)
use MIME::Base64 qw( encode_base64 );
my $str = encode_base64 pack 'C*', @codes;
这将为您提供base64编码CS20UumGFaSm0QXZ54HADg==
。要获取CS20UumGFaSm0QXZ54HADg
(无效的base64),您需要在之后删除尾随的=
字符。
$str =~ s/=+\z//;
答案 2 :(得分:1)
我怀疑你想使用encode_base64url,它使用_和 - 代替/和+并省略尾随=。