Skip to content

Instantly share code, notes, and snippets.

@skypenguins
Last active February 19, 2017 16:29
Show Gist options
  • Save skypenguins/6289c29297bf4880fb5044279ad88590 to your computer and use it in GitHub Desktop.
Save skypenguins/6289c29297bf4880fb5044279ad88590 to your computer and use it in GitHub Desktop.
バイナリファイルの操作
// BMPファイルの縦と横を読みとる
#include <stdio.h>
int main(int argc, char* argv[]){
char buff[48];
FILE* fp;
size_t size = 1;
size_t n = 48;
size_t read;
if(argc < 2){
printf("BMPファイルの指定がありません。\n");
return 0;
}
fp = fopen(argv[1], "rb");
if(NULL != fp){
printf("%s をオープンしました...\n", argv[1]);
if(n == (read = fread(buff, size, n, fp))){
if('B' == buff[0] && 'M' == buff[1]){
printf("width: %d height: %d \n",
*(int*)(buff + 18), *(int*)(buff + 22));
}else{
printf("ファイルがBMP形式ではありません。\n");
}
}else{
printf("%d バイトしか読み込みできませんでした...\n",
read * size);
}
if(0 != fclose(fp)){
printf("ファイルのクローズに失敗\n");
}else{
printf("ファイルをクローズしました。\n");
}
}
return 0;
}
// 先頭から0~255の256バイトのバイナリファイルを作成する
#include <stdio.h>
int main(int argc, char* argv[]){
char buff[256];
FILE* fp;
size_t size = 1;
size_t n = 256;
size_t written;
int cnt;
if(argc < 2){
printf("ファイル名の指定がありません。\n");
return 0;
}
for(cnt = 0; cnt < 256; ++cnt){
buff[cnt] = cnt;
}
fp = fopen(argv[1], "wb");
if(NULL != fp){
printf("%s を作成中...\n", argv[1]);
written = fwrite(buff, size, n, fp);
printf("ファイルの作成に%sしました。\n",
n == written ? "成功" : "失敗");
if( 0 != fclose(fp)){
printf("ファイルのクローズに失敗しました。\n");
}else{
printf("ファイルのクローズに成功しました。\n");
}
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment