2014-10-23 7 views
0

arround를 검색했지만 대답을 찾을 수 없습니다 ... C에서 fread()가 파일의 ascii 텍스트를 무시합니까? exemple 들어 ,이 같은 파일을 얻을 경우 : 나는 파일의 끝에 만 바이너리를 얻고 아스키 코드를 건너 뛰기위한fread가 ascii 텍스트를 무시합니까?

그래서
this is ascii 
16 
words 
words 
and then binary 
1E 04 1A 00 07 FF 

, 어쨌든 거기를? 또는 fread는 그것을 단지 무시합니까? 미리 감사드립니다.

+0

해당 파일에는 ASCII 만 포함되어있는 것 같습니다. 마지막 줄은 16 진수와 공백으로 구성됩니다. "그 다음 바이너리"행 다음에 16 진수 표현이'1E 04 1A 00 07 FF' 인 6 바이트 시퀀스가 ​​오는 것을 의미하는 경우 질문을 업데이트하여 명확하게 작성하십시오. –

답변

0

fread()이 자동으로 정보를 건너 뛰는 지 묻는다면, 아니요. fread() 함수는 현재 파일 위치에서 읽은 바이트 수만큼 읽습니다. 이 아니며은 ASCII 또는 텍스트 또는 다른 종류의 정보를 건너 뜁니다.

바이너리 파일 만 가져 오는 경우 파일 위치가 가리키는 파일 위치입니다.

, 어떻게 든 그것을 감지하고 당신이 때까지 스스로를 생략 할 것이다 끝에 물건 (즉 여전히 ASCII, 그것은 16 진수 숫자를 비록, 이후 인용)는 "바이너리"를 읽고 싶다면 그 지점에 도달하십시오.

예를 들어, 파일에서 항상 오프셋 42 인 경우 fseek을 사용하여 해당 지점으로 이동할 수 있습니다. 여섯 번째 줄에 항상 있다면, 다섯 번째 줄 바꿈까지 문자를 읽을 수 있습니다.

선택한 방법은 데이터 레이아웃과 에 따라 달라집니다. 바이너리 정보의 시작을 감지 할 수 있습니다.

+0

그래서 바이너리 읽기를 위해 파일을 열면 처음부터 ascii 코드 부분을 무시하고 첫 번째 바이너리에서 포인터가 시작됩니까? –

+0

@ JoãoSilva : 아니요. 바이너리 용으로 열면 텍스트 모드 (예 : CR/LF에서 NL 로의 변환 또는 떨림, 메인 프레임의 FB80 데이터 세트에서 읽을 때 후행 공백 제거)에서 허용되는 번역이 비활성화됩니다. 아무것도하지 않습니다. – paxdiablo

+0

나는 당신이 당신의 대답을 편집했다고 생각합니다. 필자의 테스트 파일에서 바이너리가 시작되는 곳을 알게 될 것입니다. 왜냐하면 바이너리의 시작 부분으로 포인터를 옮기고 fseek를 사용하여 읽기를 시작해야한다는 것을 알고 있기 때문에 제가해야 할 일이 무엇입니까? –

관련 문제