Base64 decode data: Difference between revisions
Content added Content deleted
m (BaCon moved to the BASIC section.) |
(Added XPL0 example.) |
||
Line 2,045: | Line 2,045: | ||
-- Paul R. Ehrlich |
-- Paul R. Ehrlich |
||
</pre> |
</pre> |
||
=={{header|XPL0}}== |
|||
<syntaxhighlight lang "XPL0">func Decode(Ch); |
|||
int Ch; |
|||
[if Ch>=^A & Ch<=^Z then return Ch - ^A; |
|||
if Ch>=^a & Ch<=^z then return Ch - ^a + 26; |
|||
if Ch>=^0 & Ch<=^9 then return Ch - ^0 + 52; |
|||
if Ch = ^+ then return 62; |
|||
if Ch = ^/ then return 63; |
|||
return -1; |
|||
]; |
|||
char Str; |
|||
int Count, N, Ch, Code, Acc; |
|||
[Str:= |
|||
"VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEg |
|||
Y29tcHV0ZXIuCiAgICAtLVBhdWwgUi5FaHJsaWNo "; |
|||
loop [Count:= 0; |
|||
for N:= 1 to 4 do \read in four 6-bit chars |
|||
[repeat Ch:= Str(0); \strip out whitespace |
|||
Str:= Str+1; |
|||
if Ch = $A0 then quit; \terminating space |
|||
until Ch > $20; |
|||
Code:= Decode(Ch); |
|||
Acc:= Acc<<6; |
|||
if Code >= 0 then \don't count possible "=" |
|||
[Acc:= Acc + Code; |
|||
Count:= Count+1; |
|||
]; |
|||
]; |
|||
ChOut(0, Acc>>16); \write out three 8-bit chars |
|||
if Count >= 3 then ChOut(0, Acc>>8); |
|||
if Count >= 4 then ChOut(0, Acc); |
|||
]; |
|||
]</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
To err is human, but to really foul things up you need a computer. |
|||
--Paul R.Ehrlich</pre> |
|||
=={{header|zkl}}== |
=={{header|zkl}}== |