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: rm55+@pitt.edu (Rudolph T Maceyko) Newsgroups: comp.lang.perl Subject: Re: Base 64? Message-ID: <5590@blue.cis.pitt.edu> Date: 1 Nov 93 09:00:45 GMT References: Sender: news+@pitt.edu Organization: University of Pittsburgh Lines: 83 In article uglykid@netcom.com (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 University of Pittsburgh/CIS .