텍스트 파일과 바이너리 파일의 차이점: 1. 텍스트 파일은 문자 인코딩을 기반으로 하는 파일입니다. 일반적인 인코딩에는 ASCII 인코딩, UNICODE 인코딩 등이 포함됩니다. 2. 바이너리 파일은 값 인코딩을 기반으로 하는 파일입니다.
텍스트 파일 텍스트 파일과 바이너리 파일의 차이점:
1. 텍스트 파일과 바이너리 파일의 정의
컴퓨터 저장소는 물리적으로 바이너리라는 것은 누구나 알고 있으므로 텍스트 파일과 바이너리 파일의 차이는 물리적인 것이 아니라, 논리적이다. 둘은 코딩 수준에서만 다릅니다. 간단히 말하면 텍스트 파일은 문자 인코딩을 기반으로 하는 파일입니다. 일반적인 인코딩에는 ASCII 인코딩, UNICODE 인코딩 등이 포함됩니다. 바이너리 파일은 값 인코딩을 기반으로 하는 파일입니다. 특정 응용 프로그램에 따라 특정 값이 의미하는 바를 지정할 수 있습니다(이러한 프로세스는 사용자 정의 인코딩으로 간주될 수 있음).
위에서 볼 수 있듯이 텍스트 파일은 기본적으로 문자를 기준으로 각 문자가 특정 인코딩으로 고정되어 있으며 ASCII 코드는 8비트 인코딩이며 일반적으로 UNICODE는 16비트를 차지합니다. 바이너리 파일은 값 인코딩이기 때문에 가변 길이 인코딩으로 간주될 수 있습니다. 값을 나타내는 비트 수는 전적으로 사용자에게 달려 있습니다. BMP 파일에 대해 잘 알고 계시겠지만, 헤더는 상대적으로 길이가 고정된 파일 헤더 정보입니다. 처음 2바이트는 파일이 BMP 형식임을 기록하는 데 사용됩니다. 파일 길이를 기록하고 다음 4바이트는 bmp 파일 헤더의 길이를 기록하는 데 사용됩니다. . . 보시다시피 인코딩은 값(2, 4, 8바이트 길이의 값을 포함한 가변 길이)을 기반으로 하므로 BMP는 바이너리 파일입니다.
2. 텍스트 파일 및 바이너리 파일 액세스
텍스트 도구로 파일을 여는 과정은 무엇인가요? 메모장을 예로 들면, 먼저 파일에 물리적으로 대응하는 바이너리 비트 스트림(앞서 언급한 바와 같이 저장 공간은 바이너리임)을 읽은 다음 선택한 디코딩 방법에 따라 이 스트림을 해석한 다음 해석 결과를 표시합니다. 일반적으로 선택하는 디코딩 방법은 ASCII 코드 형식입니다(ASCII 코드의 한 문자는 8비트입니다). 다음으로 이 파일 스트림을 8비트 8비트로 해석합니다. 예를 들어, "01000000_01000001_01000010_01000011"(가독성을 높이기 위해 수동으로 추가한 밑줄 '_')과 같은 파일 스트림의 경우 처음 8비트 '01000000'이 ASCII 코드에 따라 디코딩되면 해당 문자는 'A'입니다. 나머지 세 개의 8비트는 각각 'BCD'로 디코딩될 수 있습니다. 즉, 이 파일 스트림은 "ABCD"로 해석될 수 있으며 메모장은 이 "ABCD"를 화면에 표시합니다.
사실 세상의 어떤 것이 다른 것과 소통하고 싶다면 정해진 프로토콜과 정해진 인코딩이 있습니다. 사람들은 말을 통해 서로 소통합니다. 한자 "어머니"는 당신을 낳은 사람을 나타냅니다. 그런데 일본어로 '엄마'라는 한자가 자신이 낳은 사람을 지칭할 수도 있다는 걸 알게 됐어요. 그래서 중국인 A와 일본인 B가 '어머니'라는 단어를 사용해 의사소통을 하면 오해가 생기기 쉽습니다. 정상적으로 발생합니다. 메모장으로 바이너리 파일을 여는 것은 위의 상황과 유사합니다. 어떤 파일을 열어도 메모장은 설정된 문자 인코딩(ASCII 코드 등)에 따라 작동하므로 바이너리 파일을 열면 디코딩과 디코딩이 일치하지 않는 현상이 불가피합니다. 예를 들어 파일 스트림 '00000000_00000000_00000000_00000001'은 이진 파일의 4바이트 정수 int1에 해당할 수 있으며 메모장에서 해석되면 4개의 제어 문자 "NULL_NULL_NULL_SOH"가 됩니다.
텍스트 파일의 저장과 읽기는 기본적으로 역과정이므로 다시 설명하지 않겠습니다. 바이너리 파일의 액세스는 인코딩/디코딩 방법이 다르다는 점을 제외하면 텍스트 파일의 액세스와 분명히 유사합니다. 이에 대해서는 다시 설명하지 않겠습니다.
3. 텍스트 파일과 바이너리 파일의 장단점
텍스트 파일과 바이너리 파일의 차이점은 인코딩뿐이므로 장단점은 인코딩의 장단점을 찾아 읽어보세요. 이것은 더 명확해질 것입니다. 일반적으로 텍스트 파일 인코딩은 고정 길이 문자를 기반으로 하며 디코딩하기가 더 쉽다고 알려져 있습니다. 이진 파일 인코딩은 가변 길이이므로 유연하고 저장 공간 활용도가 높으며 디코딩하기가 더 어렵습니다(다른 이진 파일 형식). 다른 디코딩 방법이 있습니다). 공간 활용과 관련하여 바이너리 파일은 의미(비트 연산)를 나타내기 위해 1비트를 사용할 수도 있지만 텍스트 파일의 모든 의미는 최소한 한 문자입니다.
또한 많은 책에서는 텍스트 파일이 더 읽기 쉽고 저장하려면 변환 시간이 필요하다고 생각합니다(읽고 쓰려면 인코딩 및 디코딩이 필요함). 반면 바이너리 파일은 읽기가 어렵고 저장을 위한 변환 시간이 없습니다(읽고 쓰기에는 인코딩 및 디코딩이 필요하지 않음). , 직접 작성) 값). 여기서의 가독성은 일반 메모장 도구를 사용하여 거의 모든 텍스트 파일을 검색할 수 있기 때문에 소프트웨어 사용자의 관점에서 나온 것입니다. 따라서 특정 바이너리 파일을 읽고 쓰는 동안 텍스트 파일을 읽을 수 있다고 말하므로 특정 파일 디코더가 필요합니다. 예를 들어, BMP 파일을 읽으려면 이미지 읽기 소프트웨어를 사용해야 합니다. Windows와 같은 일부 운영 체제는 캐리지 리턴 및 줄 바꿈을 변환해야 하기 때문에('n'을 'rn'으로 대체하므로 파일을 읽고 쓸 때 운영 체제가 현재 문자가 'n'인지 'rn'인지 문자별로 확인하세요.) Linux 운영 체제에서는 저장소 변환이 필요하지 않습니다. 물론 서로 다른 두 운영 체제에서 파일을 공유하는 경우에는 이 저장소 변환이 다시 가능합니다. 예를 들어 Linux 시스템과 Windows 시스템은 텍스트 파일을 공유합니다. 이 변환을 수행하는 방법에 대해서는 다음 기사 "Linux 텍스트 파일과 Windows 텍스트 파일 간의 변환"에서 설명하겠습니다 ^_^
IV. C의 텍스트 읽기 및 쓰기와 바이너리 읽기 및 쓰기
는 C라고 해야 합니다. 텍스트 읽기 및 쓰기와 바이너리 읽기 및 쓰기는 특정 운영 체제와 관련된 프로그래밍 수준 문제이므로 "텍스트 모드에서 읽고 쓴 파일은 텍스트 파일이어야 하고 바이너리 모드에서 읽고 쓴 파일은 바이너리 파일이어야 합니다." 보기가 잘못되었습니다. 다음 설명에서는 운영 체제 유형을 명시적으로 나타내지는 않지만 모두 Windows를 나타냅니다. C의 텍스트 읽기 및 쓰기와 바이너리 읽기 및 쓰기의 차이점은 캐리지 리턴 및 줄 바꿈 처리에만 반영됩니다. 텍스트 모드로 쓸 때 'n'(0AH 줄 바꿈)을 만날 때마다 이를 'rn'(0D0AH, 캐리지 리턴 및 줄 바꿈)으로 바꾼 다음 텍스트를 읽을 때마다 파일에 씁니다. A 'rn'을 만나면 이를 'n'으로 역으로 변경한 다음 읽기 버퍼로 보냅니다. 텍스트 모드에서는 'n'과 'rn' 사이의 변환이 있기 때문에 변환에 시간이 많이 걸립니다. 바이너리를 읽고 쓸 때 변환이 없으며 쓰기 버퍼의 데이터가 파일에 직접 기록됩니다.
일반적으로 프로그래밍 관점에서 볼 때 C에서 텍스트 또는 바이너리 읽기 및 쓰기는 텍스트를 읽고 쓸 때 캐리지 리턴 및 줄 바꿈 변환이 있다는 점을 제외하면 버퍼와 파일의 바이너리 스트림 간의 상호 작용입니다. 따라서 쓰기 버퍼에 개행 문자 'n'(0AH)이 없으면 텍스트 쓰기와 바이너리 쓰기의 결과는 동일합니다. 마찬가지로 파일에 'rn'(0DH0AH)이 없으면 결과는 동일합니다. 텍스트 읽기와 이진 읽기는 동일합니다.
위 내용은 텍스트 파일과 바이너리 파일의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!