我有一个基本上是二进制的字符串
my $string = "000110";
如果我正确读取documentation,我一直在尝试使用encode_base64,但会对字符串进行编码。
my $j = MIME::Base64->encode_base64($string);
print "$j\n"; # should print 'A'
>> TUlNRTo6QmFzZTY000000
我怎样才能在perl中实现这个目标?该字符串的长度应为~120个二进制位。 我默认不使用任何未安装perl的模块,此脚本的目标受众不熟悉shell。
编辑: 这个问题的很多答案都围绕着字符串,而不是实际数字,我找到了一个解决方案,但它需要安装Math :: BaseCalc模块。
Edit2:基本上,如果我有
my $binary_string = "000110";
我想将它编码为base64(作为数字),因此返回
>>G # for this case (binary number 000110 to base64 number = G)
答案 0 :(得分:4)
base64是一种转换8位字节/字符串的算法。其他任何东西必须打包成字节。
你已经有了一个字符串,但是通过使用以下方法将120位打包成15个字节可以提高空间效率:
my $base64 = encode_base64(pack("B*", $binary), "");
逆操作是
my $binary = unpack("B*", decode_base64($base64));
例如,
$ perl -MMIME::Base64 -E'say encode_base64(pack("B*", $ARGV[0]), "")' \
0100000101000010
QUI=
$ perl -MMIME::Base64 -E'say unpack("B*", decode_base64($ARGV[0]))' \
QUI=
0100000101000010
如果你实际上有多个位不能被8整除,你可以在字符串前面加上位数。
my $base64 = encode_base64(pack("CB*", length($binary), $binary), "");
逆操作是
my ($length, $binary) = unpack("CB*", decode_base64($base64));
substr($binary, $length) = "";