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 lcCodeMartinaJ