Monday, November 13, 2006
C언어] 이진파일 쓰기/바이너리 파일 만들기 예제; Make, Write Binary File
out.bin 이라는 이진파일을 만들어서, 그 안에 이진 데이터를 쓰는 방법입니다. out.bin 이라는 파일이 현재 디렉토리에 이미 있다면 덮어쓰게 됩니다.
파일명: 0.cpp
if ( (out = fopen("out.bin", "wb")) == NULL ) {...
에서 "wb" 의
"w" 는 "쓰기 모드"
"b" 는 이진파일 모드를 의미합니다. 즉, 쓰기 모드로 이진파일을 열라는 뜻인데, "out.bin" 파일이 없다면 새로 만들고, 이미 있다면 덮어씁니다.
sizeof(array) / sizeof(array[0])
이것은 배열 요소의 개수를 구하는 것입니다. 이렇게 구하지 않고, 상수로서 직접 배열 요소 개수를 지정해 주어도 됩니다.
if (fputc(array[i], out) == EOF) {...
fputc() 함수로 파일에 1바이트씩 데이터를 저장합니다.
파일을 쓰다가 에러가 나면 강제 종료합니다.
위의 예제를 실행하면, 현재 디렉토리에 out.bin 이라는 파일명의 16바이트짜리 이진파일이 생길 것입니다.
그 파일을 메모장으로 보면 이상한 문자들이 적혀 있을 것이고,
헥사 뷰어로 보면 다음과 같을 것입니다:
▶▶ C언어] 이진파일 읽기; 바이너리 파일 읽기전용으로 열기; Open, Read Binary File
이진파일 저장 / Binary 로 저장 예제
파일명: 0.cpp
#include <stdio.h>
#include <stdlib.h> // exit()
int main(void) {
FILE *out;
// 새로 만들 이진파일의 내용을 바이트 배열로 표현
unsigned char array[] = { 0x02, 0x74, 0x21, 0x6A, 0x02, 0x6A, 0xFF, 0x53, 0xE8, 0x8F, 0x0E, 0x00, 0x00, 0x83, 0xC4, 0xFF };
// 이진파일 쓰기용으로 열기, 없다면 새로 만들고
if ( (out = fopen("out.bin", "wb")) == NULL ) {
fputs("파일 열기 에러!", stderr);
exit(1);
}
// 이진 파일에, array[] 배열의 요소를 하나씩 쓰기
for (int i = 0; i < ( sizeof(array) / sizeof(array[0]) ); i++) {
if (fputc(array[i], out) == EOF) {
fputs("파일 쓰기 에러!", stderr);
exit(2);
}
}
fclose(out); // 파일 닫기
return 0;
}
#include <stdlib.h> // exit()
int main(void) {
FILE *out;
// 새로 만들 이진파일의 내용을 바이트 배열로 표현
unsigned char array[] = { 0x02, 0x74, 0x21, 0x6A, 0x02, 0x6A, 0xFF, 0x53, 0xE8, 0x8F, 0x0E, 0x00, 0x00, 0x83, 0xC4, 0xFF };
// 이진파일 쓰기용으로 열기, 없다면 새로 만들고
if ( (out = fopen("out.bin", "wb")) == NULL ) {
fputs("파일 열기 에러!", stderr);
exit(1);
}
// 이진 파일에, array[] 배열의 요소를 하나씩 쓰기
for (int i = 0; i < ( sizeof(array) / sizeof(array[0]) ); i++) {
if (fputc(array[i], out) == EOF) {
fputs("파일 쓰기 에러!", stderr);
exit(2);
}
}
fclose(out); // 파일 닫기
return 0;
}
if ( (out = fopen("out.bin", "wb")) == NULL ) {...
에서 "wb" 의
"w" 는 "쓰기 모드"
"b" 는 이진파일 모드를 의미합니다. 즉, 쓰기 모드로 이진파일을 열라는 뜻인데, "out.bin" 파일이 없다면 새로 만들고, 이미 있다면 덮어씁니다.
sizeof(array) / sizeof(array[0])
이것은 배열 요소의 개수를 구하는 것입니다. 이렇게 구하지 않고, 상수로서 직접 배열 요소 개수를 지정해 주어도 됩니다.
if (fputc(array[i], out) == EOF) {...
fputc() 함수로 파일에 1바이트씩 데이터를 저장합니다.
파일을 쓰다가 에러가 나면 강제 종료합니다.
위의 예제를 실행하면, 현재 디렉토리에 out.bin 이라는 파일명의 16바이트짜리 이진파일이 생길 것입니다.
그 파일을 메모장으로 보면 이상한 문자들이 적혀 있을 것이고,
헥사 뷰어로 보면 다음과 같을 것입니다:
00000000: 02 74 21 6A 02 6A FF 53 E8 8F 0E 00 00 83 C4 FF .t!j.j.S........
▶▶ C언어] 이진파일 읽기; 바이너리 파일 읽기전용으로 열기; Open, Read Binary File
tag: cpp
C언어 | C/C++ (Visual C++)
<< Home