Base64 decode data: Difference between revisions
Content deleted Content added
Bash decode |
|||
Line 46: | Line 46: | ||
ico$ = B64DEC$(data$) |
ico$ = B64DEC$(data$) |
||
BSAVE ico$ TO "favicon.ico" SIZE LEN(ico$)</lang> |
BSAVE ico$ TO "favicon.ico" SIZE LEN(ico$)</lang> |
||
=={{header|Bash}}== |
|||
{{trans|Bash}} |
|||
<lang bash>#! /bin/bash |
|||
declare -a encodeTable=( |
|||
# + , - . / 0 1 2 3 4 5 6 7 8 9 : |
|||
62 -1 -1 -1 63 52 53 54 55 56 57 58 59 60 61 -1 |
|||
# ; < = > ? @ A B C D E F G H I J |
|||
-1 -1 -1 -1 -1 -1 0 1 2 3 4 5 6 7 8 9 |
|||
# K L M N O P Q R S T U V W X Y Z |
|||
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|||
# [ \ ] ^ _ ` a b c d e f g h i j |
|||
-1 -1 -1 -1 -1 -1 26 27 28 29 30 31 32 33 34 35 |
|||
# k l m n o p q r s t u v w x y z |
|||
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
|||
) |
|||
function a2b6() |
|||
{ |
|||
if [ $1 -lt 43 -o $1 -gt 122 ] |
|||
then |
|||
echo -1 |
|||
else |
|||
echo ${encodeTable[$(($1-43))]} |
|||
fi |
|||
} |
|||
function flush() { |
|||
for (( k=2; k>=4-CNT; k-- )) |
|||
do |
|||
(( b8=BUF>>(k*8)&255 )) |
|||
printf -v HEX %x $b8 |
|||
printf \\x$HEX |
|||
done |
|||
} |
|||
while read INPUT |
|||
do |
|||
for (( i=0; i<${#INPUT}; i++ )) |
|||
do |
|||
printf -v NUM %d "'${INPUT:$i:1}" |
|||
if (( NUM==61 )) |
|||
then |
|||
flush |
|||
exit 0 |
|||
else |
|||
DEC=$( a2b6 $NUM ) |
|||
if (( DEC>=0 )) |
|||
then |
|||
(( BUF|=DEC<<6*(3-CNT) )) |
|||
if (( ++CNT==4 )) |
|||
then |
|||
flush |
|||
(( CNT=0, BUF=0 )) |
|||
fi |
|||
fi |
|||
fi |
|||
done |
|||
done</lang> |
|||
=={{header|C}}== |
=={{header|C}}== |