Kezdőoldal » Számítástechnika » Programozás » Pascal: Valakinek van normál...

Pascal: Valakinek van normál statikus megvalósítása ennek a kódolási algoritmusnak? Szeretném megérteni, de a dinamikus változókat sose értettem.

Figyelt kérdés

Normál statikus változókkal érdekelne ez a Base64 kódolási algoritmus...

Nem értem hogy a Windows unit-ot is miért hívja be, nem grafikus alkalmazás...



unit Base64;

interface

uses windows;

{ Base64 encode and decode a string }

function BASE64Encode(src:pByte;len:integer):PAnsiChar;

function BASE64Decode(src:PAnsiChar;var dst:pByte):integer;

{******************************************************************************}

{******************************************************************************}

implementation

uses common;

const

base64chars{:array [0..63] of AnsiChar}:PAnsiChar =

'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';

function BASE64Encode(src:pByte;len:integer):PAnsiChar;

var

dst:PAnsiChar;

begin

if (src=nil) or (len<=0) then

begin

result:=nil;

exit;

end;

mGetMem(result,((len*4+11) div (12*4))+1);

dst:=result;

while len>0 do

begin

dst^:=base64chars[src^ shr 2]; inc(dst);

if len=1 then

begin

dst^:=base64chars[(src^ and 3) shl 4]; inc(dst);

dst^:='='; inc(dst);

dst^:='='; inc(dst);

break;

end;

dst^:=base64chars[((src^ and 3) shl 4) or (pbyte(PAnsiChar(src)+1)^ shr 4)]; inc(dst); inc(src);

if len=2 then

begin

dst^:=base64chars[(src^ and $F) shl 2]; inc(dst);

dst^:='='; inc(dst);

break;

end;

dst^:=base64chars[((src^ and $F) shl 2) or (pbyte(PAnsiChar(src)+1)^ shr 6)]; inc(dst); inc(src);

dst^:=base64chars[src^ and $3F]; inc(dst); inc(src);

dec(len,3);

end;

dst^:=#0;

end;

function Base64CharToInt(c:AnsiChar):byte;

begin

case c of

'A'..'Z': result:=ord(c)-ord('A');

'a'..'z': result:=ord(c)-ord('a')+26;

'0'..'9': result:=ord(c)-ord('0')+52;

'+': result:=62;

'/': result:=63;

'=': result:=64;

else

result:=255;

end;

end;

function BASE64Decode(src:PAnsiChar;var dst:pByte):integer;

var

slen:integer;

ptr:pByte;

b1,b2,b3,b4:byte;

begin

if (src=nil) or (src^=#0) then

begin

result:=0;

dst:=nil;

exit;

end;

pAnsiChar(ptr):=src;

while ptr^<>0 do inc(ptr);

slen:=PAnsiChar(ptr)-src;

mGetMem(ptr,(slen*3) div 4);

dst:=ptr;

result:=0;

while slen>0 do

begin

b1:=Base64CharToInt(src^); inc(src);

b2:=Base64CharToInt(src^); inc(src);

b3:=Base64CharToInt(src^); inc(src);

b4:=Base64CharToInt(src^); inc(src);

dec(slen,4);

if (b1=255) or (b1=64) or (b2=255) or (b2=64) or (b3=255) or (b4=255) then

break;

ptr^:=(b1 shl 2) or (b2 shr 4); inc(ptr); inc(result);

if b3=64 then

break;

ptr^:=(b2 shl 4) or (b3 shr 2); inc(ptr); inc(result);

if b4=64 then

break;

ptr^:=b4 or (b3 shl 6); inc(ptr); inc(result);

end;

end;

end.



2015. szept. 4. 22:01
 1/4 coopper ***** válasza:

Szia.


A googlenek biztos van : [link]


Első találat : [link]


Sok sikert.

Üdv.

2015. szept. 4. 23:02
Hasznos számodra ez a válasz?
 2/4 A kérdező kommentje:

Köszönöm szépen.

Én más keresőszóval kerestem és azért csak ezt a fentebbi algoritmust dobta ki.

2015. szept. 5. 14:19
 3/4 anonim ***** válasza:
Hallod, én sajna nem értek ezekhez, de azt tudom hogy a programozók kávéval működnek. Lehet te nem ittál eleget.
2015. szept. 19. 21:50
Hasznos számodra ez a válasz?
 4/4 A kérdező kommentje:
Hú te, most hogy mondod, három éve leszoktam a kávéról...
2015. szept. 21. 02:10

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!