텍스트 파일은 글자들이 씌어있는 파일이다.

사람이 눈으로 직접 내용을 읽을 수 있다.

텍스트 파일은 아스키 파일 이라고도 한다.

대부분의 텍스트 파일이 아스키코드로 글자들을 나타내기 때문이다.

대표적인 확장자가 txt 이고 그밖에 .c, .cpp .bat, .java, .xml 등등 각종 프로그램이 소스들과 웹문서도

텍스트 파일이다.



바이너리 파일은 0과 1로 이루어진 이진 파일을 말한다.

직접 읽긴 힘들고 .exe, .dll처럼 프로그램 파일과 zip, rar같은 압출파일, gif,mp3같은 멀티미디어 파일이다.



엄밀히 말하면 텍스트 파일도 바이너리 파일의 일부분이다.

제한된 형태일 뿐이다.



작업시엔 fread 할때

text파일은 끝을 명확히 알수 있는 반면에 바이너리 파일은 어디가 끝인지 구분하기 힘들어

읽을 부분을 제대로 설정 할 수가 없다.


Text파일의 인코딩 방법 알아보기

Posted 2012. 10. 16. 13:46

인코딩 탕입이란 특정 캐릭터셋으로 만들어진 파일을 보여주는 방식이다.

전세계 주요 언어문자를 하나의 바이너리 코드로 처리하기 위해서 유니코드로 만들었지만

이 코드를 보여주는 인코딩 방식은 다양하다.

텍스트 파일이 어떤 인코딩 타입으로 설정되어 있느냐에 따라 똑같은 유니코드 데이터도 제대로

보이기도 안보이기도 한다. 그래서 어떤 인코딩타입으로 되어 있는지 알아내야 한다.


텍스트 파일엔 인코딩 방법이 여러가지가 있다

1. 안시

2. Unicode( little Endian )

3. Unicode( big Endian )

4. UTF-8

txt파일 -> 다른이름 저장 -> 하면 인코딩 방식 메뉴 있음.

상대방이 어떤 방식으로 작업을 했는지 통보를 받지 못하는 경우도 생긴다.

파일을 읽기전에 인코딩 방식을 알아본뒤 작업하자.

인코딩 방식을 알아보려면 파일을 3바이트만 읽어오면 된다.

3바이트 읽는 이유는 각각 방식들이 나타내는 비트가 있는데 UTF-8은 바이트가 필요하기 때문이다.

나머진 2바이트면 됨.(비트들은 16진수로 되어있다)


#include <stdion.h>

#include <string.h>

#include <ctype.h>

#include <windows.h>


int CheckEncoding( BYTE *str )

{

int iRet = 0;

BYTE Unicode_L[] = {0xFF, 0xFE};        // 유니코드 리틀

BYTE Unicode_B[] = {0xFE, 0xFF};        // 유니코드 빅

BYTE UTF_8[] = {0xEF, 0xBB, 0xBF};     // UTF-8


if( memcmp( str, Unicode_L, 2 ) == 0 )    // 메모리비교를 해야한다.

{

iRet = 2;

}

else if( memcmp( str, Unicode_B, 2 ) == 0 )

{

iRet = 3;

]

else if( memcmp( str, UTF_8, 3 ) == 0 )

{

iRet = 4;

}

else

{

iRet = 1;

}

return iRet;

}


void main()

{

BYTE buf[3];

memset( buf, 0, 3 );


FILE *p = fopen("abc.txt", "r");

fread( buf, sizeof(BYTE), 3, p );

fclose( pf );


int Ret = CheckEncoding( buf );

switch( Ret )

{

case 1:

printf("Encoding : ANSI \n");

break;

case 2:

printf("Encoding : Unicode_L \n");

break;

case 3:

printf("Encoding : Unicode_B \n");

break;

case 4:

printf("Encoding : UTF-8 \n");

break;

default:

break;

}

}

깊은복사 얕은 복사

Posted 2012. 9. 4. 15:09

얉은 복사 : 참조한 메모리 주소 복사

깊은 복사 : 복사할 주소한의 데이터 값을 복사

 

차이점

객체를 복사하는 과정에서 복사생성자가 없을 경우 생성자에서 동적할당된 메모리르 두 객체가 동시에 참조하게 된다 이떄 발생하는 문제로는 여러가지가 있겠지만 두개의 객체가 한 메모리주소를 공유하게 되고 클래스의 경우 프로세스종료시에 소멸자를 호출하게 되는데 소멸할때 호출될 메모리는 하나지만 객체를 두번이나 delete를 하게 된다. 첫 객체가 소멸될땐 문제가 없겠지만 그 다 음 복사된 객체는 소멸할때 이미 없어진 객체를 또 없애는 액션을 취하며 문제가 발생한다.

'C++' 카테고리의 다른 글

interface를 사용한 종속성 최소화  (0) 2012.12.27
스마트 포인터  (0) 2012.09.04
« PREV : 1 : ··· : 59 : 60 : 61 : 62 : 63 : 64 : 65 : ··· : 77 : NEXT »