*laBase64(62)="+" && bad index *laBase64(63)="/" && bad index laBase64(63)="+" && fix bug laBase64(64)="/" && fix bugMartinaJ
>lcData=FILETOSTR("output.pdf") && you need VFP 6.0 SP3 >lcDataBase64=ToBase64(lcData) > >PROCEDURE ToBase64() >LPARAM lcSource >LOCAL lii,liPom,lcCode,liChar >LOCAL ARRAY laBase64(64) > >lcCode="" > >* A - 65 bc64(0) >* a - 97 bc64(26) >* 0 - 48 bc64(52) >* + - 43 bc64(62) >* / - 47 bc64(63) >* = - 61 bc64(65) > >FOR lii=0 TO 25 > laBase64(lii+1)=CHR(lii+65) >NEXT >FOR lii=26 TO 51 > laBase64(lii+1)=CHR(lii+71) >NEXT >FOR lii=52 TO 61 > laBase64(lii+1)=CHR(lii-4) >NEXT >laBase64(62)="+" >laBase64(63)="/" > >FOR lii=1 TO LEN(lcSource) STEP 3 > > * nyní vezmi z prvního byte 6 bitu zleva > liChar=ASC(SUBST(lcSource,lii,1)) > > * prvních 6. bitů > lcCode=lcCode+laBase64(BITRSHIFT(liChar, 2)+1) > > * druhá šestice bitů > liPom=BITAND(liChar, 3)*16 && nechá 2 nižší bity tak jak byly a posnuje o 4 bity > > liChar=ASC(SUBST(lcSource,lii+1,1)) && načti další znak > * a zněj potřebuju 4 vyšší bity > * (posunu je do prava a přičtu to k nižžším bitům předchozího výsledku) > lcCode=lcCode+laBase64(liPom+BITRSHIFT(liChar, 4)+1) > > IF LEN(SUBST(lcSource,lii+1,2))=0 && není-li druhý a třetí znak > lcCode=lcCode+"==" > LOOP > ENDIF > > * třetí šestice bitů > * zdruhého byte potřebuju nižší 4 bity > liPom=BITAND(liChar, 15)*4 && nechá 4 nižší bity tak jak byly a posunu je do leva o dva bity > > liChar=ASC(SUBST(lcSource,lii+2,1)) && načti další znak > > * a zněj potřebuju 2 vyšší bity > * (posunu je do prava a přičtu to k nižžším bitům předchozího výsledku) > lcCode=lcCode+laBase64(liPom+BITRSHIFT(liChar, 6)+1) > > IF LEN(SUBST(lcSource,lii+2,1))=0 && není-li třetí znak > lcCode=lcCode+"=" > LOOP > ENDIF > > * čtvrtá šestice bitů > * zdruhého byte potřebuju nižší 4 bity > * nechá 6 nižších bitů tak jak byly > > lcCode=lcCode+laBase64(BITAND(liChar, 63)+1) > >NEXT >RETURN lcCode > >>