Article 7462 of comp.lang.perl:
Xref: feenix.metronet.com comp.lang.perl:7462
Path: feenix.metronet.com!news.utdallas.edu!wupost!howland.reston.ans.net!europa.eng.gtefsd.com!uunet!pitt.edu!rm55
From:
[email protected] (Rudolph T Maceyko)
Newsgroups: comp.lang.perl
Subject: Re: Base 64?
Message-ID: <
[email protected]>
Date: 1 Nov 93 09:00:45 GMT
References: <
[email protected]>
Sender:
[email protected]
Organization: University of Pittsburgh
Lines: 83
In article <
[email protected]>
[email protected] (Joe McDonald) writes:
>Does anyone have a sub to convert from/to base 64? thanks.
>-joe
If you mean base 64 the way AMS (Andrew Message System) does it, then this
might help you:
# ams.pl: Sunday, 7 June 1992 (16:33) by Rudy Maceyko
#
# based on overhead/mail/lib/genid.c in the ATK distribution
#
# Wednesday, 10 June 1992 (14:56) - changed name to ams.pl from genid.pl;
# added $AMS_DIRECTORY_PREFIX_STRING from ams/libs/hdrs/ms.h;
# also stuff from ams/libs/hdrs/ams.h
sub AMS_NUM_UATTRS { 32; }
sub AMS_ATTRNAMEMAX { 16; }
sub AMS_DIRECTORY_PREFIX_STRING { "\003\004\033\277BINARY FILE -- DO NOT EDIT!!! \n`The mail transport mechanism is trivial.' --Jim Morris\n\n\003\033\277"; }
sub AMS_DIRECTORY_PREFIX_LEN { 96; }
sub AMS_PADSIZE { 10; }
sub ATTNAMESLEN { &AMS_NUM_UATTRS() * &AMS_ATTRNAMEMAX(); }
sub AMS_DIRHEADSIZE { &ATTNAMESLEN() + (1024 - &ATTNAMESLEN)
+ &AMS_SNAPSHOTSIZE(); }
sub AMS_DATESIZE { 7; }
sub AMS_CAPTIONSIZE { 89; }
sub AMS_CHAINSIZE { 4; }
sub AMS_MIDHASHSIZE { 4; }
sub AMS_REPLYHASHSIZE { 4; }
sub AMS_ATTRIBUTESIZE { 21; }
sub AMS_IDSIZE { 19; }
sub AMS_SNAPSHOTSIZE { &AMS_DATESIZE() + &AMS_CAPTIONSIZE() + &AMS_CHAINSIZE()
+ &AMS_MIDHASHSIZE() + &AMS_REPLYHASHSIZE() + &AMS_ATTRIBUTESIZE()
+ &AMS_IDSIZE(); }
@Basis = split('',
'0123456789:=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz');
sub convlongto64
{ local($num, $pad) = @_;
join('', @Basis[(($num >> 30) & 003) | (($pad & 017) << 2),
($num >> 24) & 077, ($num >> 18) & 077, ($num >> 12) & 077,
($num >> 6) & 077, $num & 077]);
}
@DigVals = (
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 11, 0, 0,
0, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 0, 0, 0, 0, 10,
0, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 0, 0, 0, 0, 0
);
sub conv64tolong
{ local(@xnum) = split('', $_[0]);
local($Answer) = 0;
local($shift) = 6 * (@xnum - 1);
for (@xnum)
{ $Answer |= $DigVals[ord($_) - 040] << $shift;
$shift -= 6;
}
$Answer;
}
1;
__END__
--
Rudy Maceyko <
[email protected]> University of Pittsburgh/CIS