1. 程式人生 > >在C語言中使用Libb64進行Base64編解碼

在C語言中使用Libb64進行Base64編解碼

tar 語言 number const string ken doc get eof

Libb64下載地址http://sourceforge.net/projects/libb64

以下為Demo

CLibb64Demo.c

#include <stdio.h>
#include <string.h>
#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語言中使用Libb64進行Base64編解碼