본문 바로가기
공부,일/c언어

파일도 결국 1과0으로 이루어지 데이터이다.

by fromnothing1 2021. 6. 13.

파일이 어떻게 저장되어 있는지 보기 위해서 bitmap 파일을 읽어 보겠다.

bitmap 파일도 결국 1과 0 으로 이루어지 데이터이다. 

이를 이해하기 위해서 bitmap  파일 헤더가 어떻게 저장 되어 있는 지 알아보고 읽어보자 

그림출처 : [C++] 비트맵 헤더 정보를 읽어 비트맵 파일 크기 구하기 - 타스의 개발 블로그 (tars-c.github.io)

위의 정보를 이용해서 bitmap 파일 헤더에서 필요한 정보를 읽어 보자 ,

#include <stdio.h>
#include <io.h>
#include <fcntl.h>
#include <windows.h>
#pragma warning(disable : 4996)// 보안 문제로 뜨는 경고 메세지 무시 

#pragma pack(1) // 1byte 단위로 꽉꽉 저장하기 
typedef struct _smart
{
	UCHAR	Magic[2];
	UINT	FSize;
	UINT	Resv1;
	UINT	Off;
	UINT	HSize;
	UINT	Width;
	UINT	Height;
	USHORT  Planes;
	USHORT	BPP;
	UINT	Comp;
	UINT	DSize;
} smart;
#pragma pack(4)  

int main()
{
	int iFileNum;
	int iRet;
	smart* sp;
	unsigned char a[100];

	sp = a;

	iFileNum = open("1.bmp", O_RDONLY|O_BINARY);

	if (-1 == iFileNum)
	{
		printf("파일을 열수가 없습니다.");
		return 0;
	}
	//iRet = printf("파일을 열었습니다.\n");
	//printf("%d\n", iRet);
	//printf("%d\n", iFileNum);
	iRet = read(iFileNum, a, 100); // 읽은 파일 byte 수 출력
	printf("%d\n", iRet);
	printf("[%02X][%02X]\n", *(a+0), *(a + 1));
	printf("%c %c\n", *(a + 0), *(a + 1));
	printf("%08X\n", *(a + 2)); // 4byte 단위 출력 
	printf("%08X\n", *((unsigned int*)(a + 2)));
	printf("********** Bitmap File Viewer **********\n");
	printf("Magic Number : %c%c\n", *(a + 0), *(a + 1));
	printf("File Size    : %d\n", *((unsigned int*)(a + 2)));
	printf("Data Offset  : %d\n", *((unsigned int*)(a + 10)));
	printf("Header Size  : %d\n", *((unsigned int*)(a + 14)));
	printf("Width        : %d\n", *((unsigned int*)(a + 18)));
	printf("Height       : %d\n", *((unsigned int*)(a + 22)));

	printf("\nstruct 사용\n");
	printf("Magic Number : %c%c\n", sp->Magic[0], sp->Magic[1]);
	printf("File Size    : %d\n", sp->FSize);
	return 0;
}

 

'공부,일 > c언어' 카테고리의 다른 글

터보C 설치 사용  (0) 2021.06.15
Linked List 구현  (0) 2021.06.14
signed Vs unsigned  (0) 2021.06.13
c 언어 공부 추천 블로그  (0) 2021.06.09
랜덤 액세스 :fseek(),ftell()  (0) 2021.06.07

댓글