텍스트 편집기로 이진 파일을 열 때 왜 이진 코드가 표시되지 않습니까?


51

텍스트 편집기로 이진 파일을 열 때 왜 이진 코드가 표시되지 않습니까? 예를 들어, 텍스트 편집기로 이미지를 열면 이상한 문자와 사람이 읽을 수있는 문자가 표시됩니다. 그러나 이미지는 바이너리로 인코딩되어야합니다.


8
당신은 무엇을 기대합니까? 이것을 어떻게 보관해야한다고 생각하십니까?
Nikodemus RIP

2
더 많은 편집자가 바이너리에 원시 ASCII 1/0 시퀀스를 제공하지 않는 이유가 궁금합니다.
Xeoncross

7
@ Xenocross : 원시 0/1 시퀀스는 쓸모가 없으므로 많은 양의 화면 공간을 차지하기 때문에 수동 디코딩에는 너무 까다 롭습니다. 16 진 디스플레이는 일반적으로 수동 디코딩보다 우수합니다. 그리고 약간의 교육을 통해 16 진을 이진으로 또는 그 반대로 빠르고 쉽게 번역 할 수 있습니다.
Lie Ryan

3
@Fiasco 연구소 : 학자 인 하나 개 진수 번호 2 개와 자리 - FF에 00 진수로 변환 0 - 255 (2 ^ 8 = 256 개 개의 가능한 상태를 나타내는 8 비트).
Piskvor

1
@ Piskvor-나보다 더 잘 넣어 주셔서 감사합니다. deadbeef는 레코드의 8 자리 16 진수입니다. ; ^)
Fiasco Labs

답변:


83

이진텍스트 데이터는 분리되지 않습니다 . 단순히 데이터 입니다. 그것들을 하나 또는 다른 것으로 만드는 해석에 달려 있습니다. 텍스트 편집기에서 이진 데이터 (예 : 이미지 파일)를 열면 선택한 해석 (텍스트)에 맞지 않기 때문에 대부분 의미가 없습니다 .

당신이 전화 텍스트 것은 A는 일부 가능한 파일 내용의 : 데이터 주어진에 있다는 문자 집합을 읽을 수있는 문자로 변환합니다.

예를 들어 ASCII 에서 128 개의 "허용 된"값 중 약 절반은 문자와 숫자이고 30은 문장 부호이고 나머지는 제어 문자 입니다. 후자의 그룹은 텍스트 파일에서 많이 사용되지 않으며 실제로 텍스트 표현이 좋지 않습니다. 그중 일부는 줄 바꿈 문자이며 텍스트 편집기는 이미 창의적으로 표시해야합니다.

일부 텍스트 편집기에는 공백을 명시 적으로 표시하는 옵션이 있습니다. 그런 다음 정규 형식화 동작 ( 이러한 문자 의 해석 일뿐 아니라)과 함께 실제로 문자로 그려집니다 .

순수 ASCII는 128 개의 값만 해석합니다. 이 정보를 저장하는 데 사용 된 바이트는 각각 256 개의 가능한 값을 가지므로 가능한 값의 절반은 ASCII에서 허용되지 않습니다. 예를 들어 라틴어 1과 같은 지역별 문자 집합에 사용되지만 ASCII에서는 정의되지 않습니다. ASCII 만 처리 할 수있는 텍스트 뷰어에는 유용한 표현이 없습니다.


이진 데이터 는 일반적으로 텍스트로 해석되지 않습니다. 따라서이 파일에서 가능한 모든 바이트 값 이 일반적으로 발견됩니다. 다른 모든 것은 낭비 될 것입니다 (그리고 텍스트를 잘 압축 할 수있는 이유입니다). 이미지 파일 형식은 복잡하므로 일반적으로 텍스트로 볼 필요가 없으므로 읽을 필요가 없습니다.

가능한 모든 값을 읽을 수있는 문자에 매핑하는 공통 데이터 해석 (문자 세트)이 없으므로 텍스트를 읽을 수 없으므로 의미가 없으므로 주요 부분은 횡설수설로 표시됩니다.


16 진 편집기는 데이터에 대해 다른 표현을 선택합니다. 각 바이트는 2 개의 16 진 숫자 로 표시됩니다 . 이것은 단지 다른 표현이며 사람이 쉽게 읽을 수있는 문자 집합을 가진 표현입니다. 256 개의 가능한 모든 바이트 값은 2 개의 16 진수로 표현 될 수 있습니다.

이진 데이터를 16 진수로 쉽게 매핑 할 수 있으며 그 반대도 가능합니다 (1 진 16 진수로 / 이진 4 진 숫자). 이진에는 숫자 당 정보가 거의 없으므로 16 진수는 일반적으로 사람이 바이너리를 읽는 데 선호되는 방법입니다. 다른 표현을 선호하는 이유.


일부 텍스트 편집기에는 16 진 편집기 모드 와 일부 휴리스틱이있어 파일이 텍스트인지 2 진인지를 판별하고 자동으로 하나의 모드를 선택합니다. 그러나 이것은 올바르게 이해하기 어려울 수 있으며 파일의 특정 속성이 아닌지 여부를 나타냅니다.


일부 FTP 클라이언트는 텍스트 데이터에 사용할 파일 엔딩을 지정하도록 요청합니다 . Windows는 CR/LFLinux 및 Unix (Mac OS X; 포함) 와는 다른 줄 끝 문자 시퀀스 ( )를 사용하므로 이러한 프로그램은 연결된 컴퓨터의 OS와 일치하도록 파일 내용을 변경합니다 LF.


4
LF는 내가 기억하고 싶은 것보다 더 많은 시간을 물었다.
surfasb

32

바이너리 편집기가 아닌 텍스트 편집기 에서 열었 기 때문입니다 .


22
보시다시피, 텍스트.
Ignacio Vazquez-Abrams

1
쌍 (바이트)으로 배열 된 16 진수 (0-f)를 나타내는 텍스트입니다. 이진을 원하면 0과 1의 의미없는 문자열로 16 진수를 이진으로 변환하십시오. 16 진수는 사람이 더 읽기 쉽고 이해하기 쉽습니다.
Fiasco Labs

2
누군가는 이런 종류의 물건을 가르치기위한 유일한 목적으로 Ones and Zeros (그리고 16 진수 / char / dec 변환이있는 별도의 창)가 있는 실제 이진 편집기를 꺼내기 위해 대담한 조치를 취해야합니다 . 나는 그들이해서는 안된다는 것을 알고 있지만 대중 매체와 컴퓨터를 아는 척하는 수학 교사는 열망하는 아이들이 배우기를 기꺼이 기대하지 않습니다.
ZJR

@ZJR : 아무 이유도 없습니다. 많은 16 진 편집기를 사용하면 파일 컨텐츠를 2 진으로 볼 수 있습니다. 프로그래머는 일반적으로 16 진수보기만큼 유용하지 않기 때문에 그것에 대해 많이 듣지 못합니다.
David Z

16

그것은 맥락과 해석과 관련이 있습니다. 컴퓨터에는 고전압 및 저전압 패턴 또는 디스크의 자화 영역이 있으며, 해석 방법을 결정할 때만 의미가 있습니다.

다른 상황에서, 패턴 낮음-낮음-낮음-낮음-낮음-낮음-높음은 낮음-낮음-낮음-낮음-높이가 65 인 대문자 'A', 하늘색, 고객이 커피를 주문한 날짜, '3 월'을 의미 할 수 있습니다 6 번가 또는 전혀

그래픽 프로그램에서 이미지 파일을 열면 이미지 파일을 이미지로 해석하고 이미지 형식을 나타내는 패턴, 이미지 크기를 나타내는 패턴 등을 알게됩니다.

텍스트 편집기에서 이미지 파일을 열면 이미지 파일이 텍스트로 처리됩니다. 이것은 컴퓨터에서 실제로 진행되고있는 것에 훨씬 가까운 매우 간단한 형식이지만 여전히 해석이 진행되고 있습니다. 특히, 거의 모든 패턴은 특정 문자, AZ와 같은 정상적인 문자, 이상한 문자로 해석됩니다. 몇 가지 패턴은 문자로 표시되지 않고 대신 줄 바꿈, 탭과 같은 기본 형식으로 처리됩니다.

(Unicode 및 UTF-8과 같은 텍스트 인코딩과 같은 상황에서는 상황이 약간 복잡하지만 단순성을 위해 여기에서는 다루지 않습니다.)

텍스트 편집기에서 이진 파일을 연 경우 변경하면 파일 내용의 정상적인 해석이 완전히 중단되므로 파일을 망치고 사용할 수 없게되므로 변경하지 않도록주의하십시오.


3

간단한 예로, 텍스트 편집기로 열린 이미지 파일을 고려하십시오.

이미지는 3 픽셀 너비의 사각형과 각 사각형 사이에 1 픽셀의 회색 테두리가있는 간단한 체스 패턴입니다. -3 개의 검은 색 픽셀, 회색 테두리 픽셀, 3 개의 흰색 픽셀, 회색 테두리 픽셀, 반복

해당 이미지의 첫 번째 줄은 다음과 같은 네 번의 값을 갖습니다.

Black    Black    Black    Gray     White    White    White    Gray
0x000000 0x000000 0x000000 0x7F7F7F 0xFFFFFF 0xFFFFFF 0xFFFFFF 0c7F7F7F

(이진이 아닌 16 진의 경우-이진의 문자열 길이는 4 배입니다. 0x7F는 0b01111111로 대체됩니다)

텍스트 편집기에서 해당 문자열을로드하면 다음과 같은 텍스트가 표시됩니다.

[Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Del] [Del] [Del] [Blank] [Blank] [Blank] [Blank] [Blank] ] [빈] [빈] [빈] [빈] [델] [델] [델]

0x00은 Null 값의 ASCII 코드이므로 검은 색 픽셀 (24 비트 BMP에서)의 값을 얻으려면 3 번 작성해야하며 3 개의 검은 색 픽셀이 있습니다. 그런 다음 0x7F는 Delete의 ASCII 코드이며 회색 픽셀을 얻으려면 세 번이 필요합니다. 0xFF는 확장 ASCII 세트 에서조차도 특히 ASCII 코드의 가치가 없으며 3 개의 흰색 픽셀을 얻으려면 9 번 작성해야합니다. 완료하면 회색 픽셀을 작성하기 위해 세 번 더 삭제가 발생합니다.

더 유용하게 설명 할 수있는 다른 방법은 반대의 예입니다. 텍스트 편집기에서 열 때 0을 얻기 위해 파일에 무엇을 써야합니까?

물론 0과 1의 ASCII 코드! 텍스트 편집기의 0은 값이 0 인 단일 비트로 저장되지 않고 값이 0b00110000 인 8 비트 또는 16 진 0x30으로 저장됩니다.

'0'의 ASCII 코드는 0x30이고 '1'의 ASCII 코드는 0x31이므로 체스 패턴을 0과 1로 저장하려는 경우 파일은 다음과 같습니다.

text editor:
10101010
01010101
10101010
01010101

Stored data (ASCII values for '1', '0' and 'new line'):
0x31 0x30 0x31 0x30 0x31 0x30 0x31 0x30 0x0D 0x30 0x31 0x30 0x31 0x30 0x31 0x30 0x31 0x0D 0x31 0x30 0x31 0x30 0x31 0x30 0x31 0x30 0x0D  0x30 0x31 0x30 0x31 0x30 0x31 0x30 0x31

이것보다 더 많은 것이 있습니다-파일에는 시작 및 중지와 메타 데이터 및 기타 모든 종류가 있지만 질문에 대한 교훈과 답은 다음과 같습니다.

파일의 처음 8 비트가 0b00110000이 아니면 문자 '0'의 ASCII 코드이므로 텍스트 편집기에서 '0'을 쓰지 않습니다. 파일의 첫 8 비트가 0b00110001이 아닌 한 문자 편집기는 문자 '1'의 ASCII 코드이므로 '1'을 쓰지 않습니다.


0

편집기는 일부 텍스트가 의미가 있는지 여부를 파악하기에 충분하지 않으므로 해당 기능이있는 경우 달리 지시하지 않는 한 모든 파일을 텍스트로 표시합니다. 다른 사람들이 지적했듯이 일부 편집기에는 16 진수 표시 기능이 있습니다.


UltraEdit은 충분히 똑똑합니다. 이러한 파일의 경우 16 진 편집 모드로 전환됩니다.
피터 Mortensen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.