记录C++,读文件返回base64数据

 

读文件返回base64函数:

void CZZUser::hidFileToBase(const char* filePath)
{
    // 文件 转 base64

    // 计算文件长度
    unsigned long filesize = 0;
    FILE* f1;
    f1 = fopen(filePath, "r");
    fseek(f1, 0L, SEEK_END);
    filesize = ftell(f1);
    fclose(f1);

    // 读取文件内容
    FILE* fp = fopen(filePath, "rb");
    char* inBuffer = new char[filesize];
    ULONG uReaded = fread(inBuffer, 1, filesize, fp);
    fclose(fp);

    // 转base64
    std::string baseData = base64_encode((const unsigned char*)inBuffer, filesize);

}

 

 

base64编码函数:

std::string CBase64::Encode(const unsigned char* Data, int DataByte)
{

    const char EncodeTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    //  ох
    std::string strEncode;
    unsigned char Tmp[4] = { 0 };
    int LineLength = 0;
    for (int i = 0; i < (int)(DataByte / 3); i++)
    {
        Tmp[1] = *Data++;
        Tmp[2] = *Data++;
        Tmp[3] = *Data++;
        strEncode += EncodeTable[Tmp[1] >> 2];
        strEncode += EncodeTable[((Tmp[1] << 4) | (Tmp[2] >> 4)) & 0x3F];
        strEncode += EncodeTable[((Tmp[2] << 2) | (Tmp[3] >> 6)) & 0x3F];
        strEncode += EncodeTable[Tmp[3] & 0x3F];
        if (LineLength += 4, LineLength == 76) { strEncode += "\r\n"; LineLength = 0; }
    }
 
    int Mod = DataByte % 3;
    if (Mod == 1)
    {
        Tmp[1] = *Data++;
        strEncode += EncodeTable[(Tmp[1] & 0xFC) >> 2];
        strEncode += EncodeTable[((Tmp[1] & 0x03) << 4)];
        strEncode += "==";
    }
    else if (Mod == 2)
    {
        Tmp[1] = *Data++;
        Tmp[2] = *Data++;
        strEncode += EncodeTable[(Tmp[1] & 0xFC) >> 2];
        strEncode += EncodeTable[((Tmp[1] & 0x03) << 4) | ((Tmp[2] & 0xF0) >> 4)];
        strEncode += EncodeTable[((Tmp[2] & 0x0F) << 2)];
        strEncode += "=";
    }

    return strEncode;
}

 

posted @ 2022-06-17 15:46  十一的杂文录  阅读(299)  评论(0编辑  收藏  举报