base64[c] i rfc

dziadektuska

Użytkownik
Dołączył
Lipiec 8, 2006
Posty
2
Witam.
Czy ma ktoś może link do implementacji kodowania w base64 w c? Znalazłem w necie ale w c++ a ja nie nieznam się na programowaniu obiekowym i nie umiałem tego przełożyć na c.
I drugie pytanie: macie może jakieś linki do tłumaczeń dokumentów rfc.
 

saipix

Użytkownik
Dołączył
Sierpień 13, 2004
Posty
131
Kod:
char CodedData[5000000];

const char base64[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

long base64encode(const char* FileName, char* buffer,unsigned  int length)

{



    unsigned char ReadData[57];

    unsigned char ResData[76];

    unsigned long p=0;

    unsigned long len=0;    

    unsigned long SourceLen=0;

    unsigned long CurResBufferPos=0;

    int j;

    unsigned char tmpchar;

    FileData=CreateFile(FileName,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,0,0);

    if(FileData==INVALID_HANDLE_VALUE) return 0;

    

    do

    {

        memset(ReadData,0,57);

        ReadFile(FileData,ReadData,57,&nReadBytes,NULL);

        if (nReadBytes==0) 

        {

            CloseHandle(FileData);

            return len;

        }

        j=0;

        SourceLen+=nReadBytes;

        for(unsigned int i=0;i<nReadBytes;i+=3)

        {

            

            p=ReadData[i+2]+ReadData[i+1]*256+ReadData[i]*65536;

            for(unsigned char i1=0;i1<3;i1++)

            {

                tmpchar=p;

                tmpchar<<=2;

                tmpchar>>=2;//

                ResData[j+3-i1]=tmpchar;

                p>>=6;

            }

            ResData[j]=p;

            j+=4;

        }



        len+=j+1;

        

        if(len<=length)

        {

            for(unsigned char i1=0;i1<j;i1++)

            {

                buffer[CurResBufferPos+i1]=base64[ResData[i1]];

            }

            

            buffer[CurResBufferPos+j]='n';

            CurResBufferPos+=j+1;

        }

        else return 0;

        



    }

    while(nReadBytes==57);



    

    char pad=(3-SourceLen%3)%3;

    while(pad>0)

    {

        buffer[CurResBufferPos-1-pad]='=';

        pad--;

    }

    CloseHandle(FileData);

    return len;

}

Troche żeśmy z djczarnym odkopali topa, ale pewnie to się komuś przyda
<
 
Do góry Bottom