반응형

임의의 실수 100개를 생성시킨 후에 텍스트 파일과 이진 파일로 저장하여 보고 그 크기를 비교하여 보라.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 100
int main(void)
{
    FILE *fp1=NULL;
    FILE *fp2=NULL;
    int i;
    double arr[SIZE];
    srand((unsigned)time(NULL));
 
    if((fp1=fopen("first.bin","wb"))==NULL)
    {
        printf("파일 오픈 실패1\n");
        exit(1);
    }
    if((fp2=fopen("abc.txt","w"))==NULL)
    {
        printf("파일 오픈 실패2\n");
        exit(1);
    }
    for(i=0;i<SIZE;i++)
    {
        arr[i]=(double)rand()/RAND_MAX; //RAND_MAX는0xfff(32767) 이다. 
    } //c언어의 rand 함수는 0에서 32767을 반환한다. (double)rand();를사용하면 이진파일과 텍스트파일의 크기가 달라진다.
    fwrite(arr,sizeof(double),SIZE,fp1);
    for(i=0;i<SIZE;i++)
    {
        fprintf(fp2,"%lf",arr[i]);
    }
    fclose(fp1);
    fclose(fp2);
    return 0;
 
}
cs





rand 함수를 다르게 다용하면 텍스트 파일과 바이너리 파일의 크기가 다르게 생성되는 경우가 있습니다. 그 이유는 바이너리 상의 특정 문자가

텍스트로 저장될 때 2byte로 저장되기 때문입니다. 줄바꿈 문자인데, 이것 때문에 몇바이트, 많으면 몇십바이트씩 차이가 생기게 됩니다.

따라서 데이터베이스를 저장할 때는 꼭 바이너리 형태로 저장을 하도록 합시다.

참고 블로그 주소 : http://snbosoft.tistory.com/entry/%EB%B0%94%EC%9D%B4%EB%84%88%EB%A6%ACBinary-%ED%85%8D%EC%8A%A4%ED%8A%B8Text-%ED%8C%8C%EC%9D%BC%EC%9D%98-%EC%B0%A8%EC%9D%B4



반응형

'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글

단어 바꾸기  (0) 2017.02.18
특정 단어 찾기  (0) 2017.02.18
도서 관리 프로그램  (0) 2017.02.17
줄 번호 붙이기  (0) 2017.02.17
사용자 입력 텍스트 파일 저장  (0) 2017.02.13

+ Recent posts