28. oktober 2003 - 22:30Der er
20 kommentarer og 1 løsning
gratis base64 dll søges
Jeg skal base64 encode og decode nogle store files (>10 MB). Den algoritme jeg har skrevet i VB er simpelhen ikke hurtig nok. Derfor leder jeg efter en gratis dll som tilbyder denne funktionalitet - og som kan bruges fra VB. Bemærk at det er vigtigt at (en)codingen sker i overensstemmelse med RFC1521
Hverken stor eller hemlig - hvis den skal oversættes skal den producere nøjagtigt det samme resultet. Vi starter med encodingen. Here goes:
------------------------------------------------
'* Encode a string to base64 (rfc1521) Public Function base64encode(strInString As Variant, ByRef strOutString) As Boolean Dim cOut, sOut, i Dim inData As String inData = CStr(strInString)
'For each group of 3 bytes For i = 1 To Len(inData) Step 3 Dim nGroup, pOut, sGroup
'Create one long from this 3 bytes. nGroup = &H10000 * Asc(Mid(inData, i, 1)) + _ &H100 * MyASC(Mid(inData, i + 1, 1)) + MyASC(Mid(inData, i + 2, 1))
'Oct splits the long to 8 groups with 3 bits nGroup = Oct(nGroup)
'Add a new line for each 76 chars in dest (76*3/4 = 57) - commented out 'If (i + 2) Mod 57 = 0 Then sOut = sOut + vbCrLf Next
Select Case Len(inData) Mod 3 Case 1: '8 bit final sOut = Left(sOut, Len(sOut) - 2) + "==" Case 2: '16 bit final sOut = Left(sOut, Len(sOut) - 1) + "=" End Select strOutString = sOut
int enc_deb64(char c) { switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': return c-'0'+52; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': return c-'A'; case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': return c-'a'+26; case '+': return 62; case '/': return 63; case '=': return 0; default: return -1; } return -1; }
void NormalToB64(char *s1,int l1,char *s2,int *l2) { union overlay Cvt; char *p = s1; int ltmp = (l1*8+5)/6; int extra = 3-(ltmp+3)%4; int linlen = 0; (*l2) = 0; // loop through string for(int i=0;i<ltmp;i=i+4) { // convert 8->6 bit Cvt.eigths[2]=(((p-s1)<l1)?(*p):0); p++; Cvt.eigths[1]=(((p-s1)<l1)?(*p):0); p++; Cvt.eigths[0]=(((p-s1)<l1)?(*p):0); p++; s2[*l2]=enc_b64vals[Cvt.sixs.sb4]; (*l2)++; s2[*l2]=enc_b64vals[Cvt.sixs.sb3]; (*l2)++; s2[*l2]=enc_b64vals[Cvt.sixs.sb2]; (*l2)++; s2[*l2]=enc_b64vals[Cvt.sixs.sb1]; (*l2)++; // append newline if line too long linlen=linlen+4; if(linlen>75) { s2[*l2]='\n'; (*l2)++; linlen=0; } } // append 0,1 or 2 "=" (*l2)=(*l2)-extra; for(int j=0;j<extra;j++) { s2[*l2]='='; (*l2)++; } // append newline s2[*l2]='\n'; (*l2)++; return; }
Declare Sub B64Encode Lib "D:\IDEProjects\VisualStudio\B64\Release\B64" Alias "_B64Encode@8" (ByVal oldfilename As String, ByVal newfilename As String) Declare Sub B64Decode Lib "D:\IDEProjects\VisualStudio\B64\Release\B64" Alias "_B64Decode@8" (ByVal oldfilename As String, ByVal newfilename As String)
Function b64test() Call B64Encode("C:\z.z", "C:\z.b64") Call B64Decode("C:\z.b64", "C:\z.txt") End Function
Declare Sub B64Encode Lib "D:\B64" Alias "_B64Encode@8" (ByVal oldfilename As String, ByVal newfilename As String) Declare Sub B64Decode Lib "D:\B64" Alias "_B64Decode@8" (ByVal oldfilename As String, ByVal newfilename As String)
jeg fik en dll der løste mit problem. Men mange tak for hjælpen
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.