Skip to content

Instantly share code, notes, and snippets.

@ynakajima
Created February 26, 2014 20:27
Show Gist options
  • Save ynakajima/9237830 to your computer and use it in GitHub Desktop.
Save ynakajima/9237830 to your computer and use it in GitHub Desktop.
[C言語] ファイルを BASE64 に変換する ref: http://qiita.com/ynakajima/items/c685e8f2c25c08adc855
#include <stdio.h>
#include <stdlib.h>
#include <glib.h>
int main(int argc, char *argv[]) {
// 変数宣言
FILE* fp;
long filesize;
unsigned char* buffer;
gchar* base64;
// ファイル名が渡されなかったら終了
if (argc < 2) {
fprintf (stderr, "usage: %s filename\n", argv[0] );
return 1;
}
// ファイルを開く
fp = fopen(argv[1], "rb");
// ファイルを開けなかったら終了
if (fp == NULL) {
printf("ファイルを開けませんでした\n");
return 1;
}
// ファイルサイズ取得
fseek(fp, 0, SEEK_END);
filesize = ftell(fp);
fseek(fp, 0, SEEK_SET);
// 読み込み用のバッファーを作成
buffer = calloc(filesize, sizeof(unsigned char));
// ファイルデータをメモリに読み込む
if (fread(buffer, sizeof(unsigned char), filesize, fp)) {
// BASE64 に変換
base64 = g_base64_encode(buffer, filesize);
// 出力
printf("%s\n", base64);
g_free(base64);
}
// 終了処理
free(buffer);
fclose(fp);
return 0;
}
#include <glib.h>
#include <glib/gstdio.h>
int main(int argc, char *argv[]) {
// 変数宣言
GError** error;
GMappedFile* fp;
gsize filesize;
gchar* buffer;
gchar* base64;
// ファイル名が渡されなかったら終了
if (argc < 2) {
fprintf (stderr, "usage: %s filename\n", argv[0] );
return 1;
}
// ファイルを開く
error = NULL;
fp = g_mapped_file_new(argv[1], FALSE, error);
// ファイルを開けなかったら終了
if (fp == NULL) {
printf("ファイルを開けませんでした\n");
return 1;
}
// ファイルサイズ取得
filesize = g_mapped_file_get_length(fp);
// ファイルデータをメモリに読み込む
buffer = g_mapped_file_get_contents(fp);
if (buffer) {
// BASE64 に変換
base64 = g_base64_encode((guchar *)buffer, filesize);
// 出力
printf("%s\n", base64);
g_free(base64);
}
// 終了処理
g_mapped_file_unref(fp);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment