C/C++知识点之在C语言中使用Libb64进行Base64编解码
小标 2018-10-10 来源 : 阅读 2784 评论 0

摘要:本文主要向大家介绍了C/C++知识点之在C语言中使用Libb64进行Base64编解码,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了C/C++知识点之在C语言中使用Libb64进行Base64编解码,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。


以下为Demo
CLibb64Demo.c

#include 
#include 
#include "libb64/cencode.h"
#include "libb64/cdecode.h"
void base64EncodeString(const char *textToEncode, char *buffer);
void base64DecodeString(const char *codeToDecode, char *buffer);
void base64EncodeFile(FILE *fileToEncode, FILE *encodedFile);
void base64DecodeFile(FILE *encodedFile, FILE *decodedFile);
int main()
{
    const char *text = "Matt Damon";
    char buffer[1000];
    base64EncodeString(text, buffer);
    printf("%s", buffer);
    const char *code = "R29vZCBXaWxsIEh1bnRpbmc=";
    base64DecodeString(code, buffer);
    printf("%s\n", buffer);
    const char *inputFilename = "E:/Packages/Java/Android/docs-24_r01.zip";
    FILE *inputFile = fopen(inputFilename, "rb");
    if (inputFile)
    {
        const char *encodedFilename = "E:/Packages/Java/Android/docs-24_r01.zip.txt";
        FILE *encodedFile = fopen(encodedFilename, "wb");
        if (encodedFile)
        {
            base64EncodeFile(inputFile, encodedFile);
            fclose(encodedFile);
        }
        else
            printf("Cannot open file: %s", encodedFile);
        fclose(inputFile);
    }
    else
        printf("Cannot open file: %s", inputFile);
    const char *encodedFilename = "en_office_professional_2007_cd_X12-42316.iso.txt";
    FILE *encodedFile = fopen(encodedFilename, "rb");
    if (encodedFile)
    {
        const char *decodedFilename = "office";
        FILE *decodedFile = fopen(decodedFilename, "wb");
        if (decodedFile)
        {
            base64DecodeFile(encodedFile, decodedFile);
            fclose(decodedFile);
        }
        else
            printf("Cannot open file: %s", decodedFile);
        fclose(encodedFile);
    }
    else
        printf("Cannot open file: %s", encodedFile);
    return 0;
}
void base64EncodeString(const char *textToEncode, char *buffer)
{
    base64_encodestate state;
    base64_init_encodestate(&state);
    int numberOfEncodedBytes = base64_encode_block(textToEncode, strlen(textToEncode), buffer, &state);
    numberOfEncodedBytes += base64_encode_blockend(buffer + numberOfEncodedBytes, &state);
    buffer[numberOfEncodedBytes] = ‘\0‘;
}
void base64DecodeString(const char *codeToDecode, char *buffer)
{
    base64_decodestate state;
    base64_init_decodestate(&state);
    int numberOfCharacters = base64_decode_block(codeToDecode, strlen(codeToDecode), buffer, &state);
    buffer[numberOfCharacters] = ‘\0‘;
}
void base64EncodeFile(FILE *fileToEncode, FILE *encodedFile)
{
    char readBuffer[1024];
    char encodedBuffer[2048];
    int numberOfEncodedBytes;
    base64_encodestate state;
    base64_init_encodestate(&state);
    while (!feof(fileToEncode))
    {
        size_t numberOfObjects = fread(readBuffer, sizeof(char), 1024, fileToEncode);
        numberOfEncodedBytes = base64_encode_block(readBuffer, numberOfObjects, encodedBuffer, &state);
        fwrite(encodedBuffer, sizeof(char), numberOfEncodedBytes, encodedFile);
    }
    numberOfEncodedBytes = base64_encode_blockend(encodedBuffer, &state);
    fwrite(encodedBuffer, sizeof(char), numberOfEncodedBytes, encodedFile);
}
void base64DecodeFile(FILE *encodedFile, FILE *decodedFile)
{
    char inputBuffer[1024];
    char decodedBuffer[2048];
    int numberofDecodedBytes;
    base64_decodestate state;
    base64_init_decodestate(&state);
    while (!feof(encodedFile))
    {
        size_t numberOfCharacters = fread(inputBuffer, sizeof(char), 1024, encodedFile);
        numberofDecodedBytes = base64_decode_block(inputBuffer, numberOfCharacters, decodedBuffer, &state);
        fwrite(decodedBuffer, sizeof(char), numberofDecodedBytes, decodedFile);
    }
}

Compilation.bat

gcc -std=c11 CLibb64Demo.c libb64/*.c -o CLibb64Demo
CLibb64Demo

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved