2017-01-10 2 views
-5

ASCII 파일을 읽고이 파일을 이진 파일로 변환하려고합니다.ASCII를 이진 변환 하시겠습니까?

내 코드는 다음과 같이 간다 : I 라인`아스키 = 입력을 통해 È 같은 파일에서 단일 문자를 읽고 있어요 여기

void AtoB(char * input) 
{ 
int ascii; 
int length = strlen(input); 

for(int x=0;x<length;x++) 
{ 
    ascii = input[x]; 

[X]

나는 -56와 같은 값을 받고 있어요 [ASCII 형식 인 경우 INT]와 아스키 = 4,294,967,240도 바뀌고 여기에 ASCII 테이블이라고이 내 출력에 따라 [ASCII 형식이 서명 INT 경우] : http://www.simotime.com/asc2ebc1.htm 를, 여전히 어떤 값이 무엇인지, 어떤 기준으로 문자가 할당되었는지 이해할 수 없음 È

참고 :이 코드를 작성하려면 Win 7 64bit에서 Visual Studio 2010을 사용하고 있습니다.). 인코딩은 ANSI입니다.

아무도 이해할 수 없습니까? 감사.

The screen shot of ASCII file

+3

스팸으로 분류하지 마십시오. C는 C++이 아닙니다! – Olaf

+5

'È'는 [ASCII] (https://en.wikipedia.org/wiki/ASCII) 문자가 아닙니다. 실제로 어떤 인코딩이 사용됩니까? – ikegami

+0

[mcve]를 보여주세요. –

답변

3

ÈASCII이 아닙니다. 파일이 실제로 cp1252[1]을 사용하여 인코딩되었다고 가정 해 봅시다.

È은 cp1252를 사용하여 C8 (16 진수)입니다. 당신이 부호없는 8 비트 정수로 C8을 해석하는 경우 C8 서명 된 8 비트 정수로, 그것은 -56의 해석 경우

, 그것은 200

입니다.

그런 다음, 서명 된 8 비트 정수로 C8 해석 부호있는 32 비트 정수로 확장, 다음 부호없는 32 비트 정수로 캐스팅하면, 그래서 4294967240.

당신이 예상 한이다 값; 당신은 의도 한 것과 다르게 해석하고 있습니다.


  1. UNICODE가 정의되지 않은 빌드 시스템 호출 (시스템 호출에 LPCTSTRLPTSTR 인수의 인코딩)하는 데 사용 인코딩

    은 "ANSI"인코딩이라고합니다. 실제 인코딩은 기계마다 다를 수 있습니다. 그러나 대부분의 "모든"영어 Windows 컴퓨터에 대한 "ANSI"인코딩은 cp1252입니다.
+0

감사합니다. 내 질문에 인코딩을 추가했습니다. 위키를 확인했습니다. https://en.wikipedia.org/wiki/Windows-1252 – AskMe

+0

CP1252가 일반적입니다. 그러나 모든 버전의 Windows 및 MS-DOS에서 _console_에 대한 기본 인코딩은 CP437입니다. 'chcp'로 가십시오. –

+0

@Tom Blodget, 1) cp437은 ANSI 코드 페이지 (시스템 호출에 사용됨)가 아닌 OEM 코드 페이지 (콘솔에서 사용됨)입니다. 437을 사용하는 OS에 대해서는 절대로 말하지 않습니다. OEM cp가 437이면 ANSI cp가 1252 일 것입니다. 2) 내 OEM 코드 페이지는 [850]입니다 (https://en.wikipedia.org/wiki)./Code_page_850), 437이 아닙니다. 모든 기계에서 항상 850이었습니다. 나는 뭔가가 미국 대신에 캐나다로 설정 되었기 때문이라고 생각합니다. cp850은 악센트 부호가있는 문자가 있으므로 공식 언어를 모두 만족시킵니다. 3) cp437은'È '를 포함하지 않으므로, 분명히 cp437에 대해 말하지 않습니다. – ikegami

2

은 테이블에 따르면, È은 바이너리 11001000입니다.
char에 서명하면 11001000이 -56으로 해석됩니다. 이 경우의 부호
, 값은 200

-56 32 비트 부호없는 정수로 해석 할 때 4,294,967,240을 인 11111111111111111111111111001000이다.

관련 문제