C snippets:base 64符号化バイナリファイル(jpgピクチャのテスト)

19672 ワード

エンコードインタフェースは次のとおりです.
const char * base64char = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
char *base64_encode_file(const unsigned char * bindata, char * base64, int binlength)
{
    int i, j;
    unsigned char current;
 
    for ( i = 0, j = 0 ; i < binlength ; i += 3 )
    {
        current = (bindata[i] >> 2) ;
        current &= (unsigned char)0x3F;
        base64[j++] = base64char[(int)current];
 
        current = ( (unsigned char)(bindata[i] << 4 ) ) & ( (unsigned char)0x30 ) ;
        if ( i + 1 >= binlength )
        {
            base64[j++] = base64char[(int)current];
            base64[j++] = '=';
            base64[j++] = '=';
            break;
        }
        current |= ( (unsigned char)(bindata[i+1] >> 4) ) & ( (unsigned char) 0x0F );
        base64[j++] = base64char[(int)current];
 
        current = ( (unsigned char)(bindata[i+1] << 2) ) & ( (unsigned char)0x3C ) ;
        if ( i + 2 >= binlength )
        {
            base64[j++] = base64char[(int)current];
            base64[j++] = '=';
            break;
        }
        current |= ( (unsigned char)(bindata[i+2] >> 6) ) & ( (unsigned char) 0x03 );
        base64[j++] = base64char[(int)current];
 
        current = ( (unsigned char)bindata[i+2] ) & ( (unsigned char)0x3F ) ;
        base64[j++] = base64char[(int)current];
    }
    base64[j] = '\0';
    return 0;
}

テストプログラム:jpgファイルをbase 64符号化する
unsigned int imageSize;
unsigned char *imageBin;
char *imageBase64;
size_t result;
unsigned int base64StrLength;

FILE *fp = NULL;
fp = fopen("test.jpg", "rb");   //     
if (NULL == fp)
{
    printf("file open failed
"
); return -1; } // fseek(fp, 0L, SEEK_END); imageSize = ftell(fp); fseek(fp, 0L, SEEK_SET); // imageBin = (unsigned char *)malloc(sizeof(unsigned char)*imageSize); if (NULL == imageBin) { printf("malloc failed
"
); return -1; } // result = fread(imageBin, 1, imageSize, fp); if (result != imageSize) { printf("file read failed
"
); return -1; } fclose(fp); // buffer imageBase64 = (char *)malloc(sizeof(char)*imageSize*2);// 1/3 , if (NULL == imageBase64) { printf("malloc failed
"
); return -1; } //base64 base64_encode_file(imageBin, imageBase64, imageSize); // imageBase64 base64 free(imageBin); free(imageBase64);