당신은 모든 것을 거꾸로 가지고 있습니다. 컴퓨터 프로세서는 바이너리 수준의 데이터로 작동합니다. 컴퓨터의 모든 것은 바이너리입니다. 사람이 읽을 수있는 형태로 데이터를 처리하기 위해 우리는 인간이 이해할 수있는 것과 같은 바이너리 데이터를 만들기 위해 농구를 뛰어 넘는 함수를 작성합니다. 따라서 .BMP 데이터를 텍스트로 파일에 저장하는 경우 실제로 .BMP 데이터를 자연 바이너리 형식에서 텍스트로 변환 한 다음 텍스트 형식에서 다시 바이너리로 변환하는 작업을 컴퓨터가 수행하게됩니다 그것을 표시하기 위해.
진실은 원시 바이너리 형식으로 데이터를 처리 할 수 있으면 더 빨리 코드를 실행할 수 있다는 것입니다. 전환 수가 적을수록 코드가 빠릅니다. 하지만 분명히 절충안이 있습니다. 매직 디코더 링을 꺼내지 않고도 데이터를보고 이해할 수 있어야한다면 텍스트로 파일에 저장할 수 있습니다. 그러나 그렇게하면서 우리는 말했듯이 사람이 읽을 수있는 텍스트를 순수한 바이너리 데이터로만 작동시키는 프로세서에 의미있는 텍스트를 만들기 위해 수행되어야하는 변환 처리가 있다는 것을 이해해야합니다. 다음,
그리고, 그냥 경우에 당신은 이미 알고 또는 정렬의이 - 알고 - 그것, 당신의 질문은 "왜 바이너리 모드로 내 .BMP 파일을 열고 텍스트가 아닌 모드로해야한다"했다 이유는 텍스트 모드에서 파일을 열면 플랫폼에 따라 필요에 따라 플랫폼에서 CRLF에서 LF 로의 변환 ("\ r \ n"에서 "\ n"변환)을 수행하도록 요청하기 때문에 내부 문자열 처리 수준, 당신이 상대하는 것은 '\ n'문자입니다. 파일이 2 진 데이터로 구성된 경우, 해당 변환을 계속 수행하지 않아야합니다. 그렇지 않으면 읽은 파일의 데이터가 손상됩니다. 이 상태에서는 대부분의 데이터가 정상적으로 작동하고 대부분의 경우 정상적으로 작동하지만 간혹 0x0d, 0x0a (십진수 13,10)의 16 진수 형식의 바이트 쌍을 가로 질러 변환됩니다. 0x0a (10)로 설정하면 읽을 데이터의 1 바이트가 누락됩니다. 바이너리 파일을 바이너리 모드로 열어야합니다! (아래) 가장 최근의 코멘트에 따라
확인은 여기있다 :
당신이 (지금은?) 이해, 컴퓨터에서 데이터가 바이너리 형식으로 저장되기 때문에. 예, 0과 1의 의미입니다. 그러나 프로그래밍 할 때 어떤 이유로 든 비트 논리 연산을 수행하지 않는 한 실제로 0과 1을 직접 사용하지 않아도됩니다. 예를 들어, int
이라고하는 변수 유형은 개별 비트의 모음이며 각 비트는 0 또는 1 일 수 있습니다.또한 바이트 집합이며 바이트에 8 비트가 있다고 가정하면 플랫폼 및 컴파일러 옵션에 따라 int
에 일반적으로 2, 4 또는 8 바이트가 있습니다. 하지만 int
을 int
으로 사용하고 개별 0 및 1로 사용하지 마세요. 그 int
을 가장 순수한 형식의 파일에 쓰면 바이트 (따라서 비트)가 변환되지 않은 원시 형식으로 기록됩니다. 하지만 ASCII 텍스트로 변환하여 쓸 수도 있습니다. 화면에 int
을 표시하는 경우 개별 0과 1을 보지 않으려면 ASCII 형식으로 인쇄하십시오. 일반적으로 십진수로 디코드됩니다. 동일한 int
을 16 진수 형식으로 쉽게 인쇄 할 수 있으며 결과는 동일한 숫자 임에도 불구하고 다르게 보일 수 있습니다. 예를 들어, 10 진수로 10 진수 값 65를 가질 수 있습니다. 16 진수의 동일한 값은 0x41입니다 (또는 기본 16에 있음을 알면 41에 불과합니다). 우리가 ASCII 형식으로 표시하고 (예 : 2, -4 또는 8 바이트의 하위 바이트 만 고려하면 int
, 즉 char
으로 처리하는 경우) 동일한 값이 문자 'A'입니다.
나머지 설명에서는 int
에 대해 이야기 했으므로 지금은 char
또는 1 바이트 (8 비트)에 대해 논의 중이라고 생각해보십시오. 우리가 여전히 같은 값인 65 또는 0x41 또는 'A'를 가지고 있다고 가정 해 봅시다. 이 값을 파일로 보내려면 원시 형식으로 보내거나 텍스트 형식으로 변환 할 수 있습니다. 원시 형식으로 보내면 파일에서 8 비트 (1 바이트)를 차지합니다. 그러나 텍스트 형식으로 파일에 쓰려면 ASCII로 변환하십시오. 형식을 쓰고 자하는 실제 값 (이 경우 65)에 따라 1, 2 중 하나를 차지합니다 , 또는 3 바이트. 패딩 문자가없는 10 진수 ASCII로 쓰고 싶다고합시다. 값 65는 2 바이트를 취합니다. 하나는 '6'이고 다른 하나는 '5'입니다. 16 진수 형식으로 인쇄하려면 '0x'로 시작하지 않는 한 '4'와 '1'에 대해 하나씩 2 바이트를 취합니다.이 경우 4 바이트를 취합니다 '0', 'x', '4'및 '1'에 대한 값입니다. char
값이 255 (최대 값은 char
)라고 가정합니다. 10 진수 ASCII 형식으로 파일에 쓰면 3 바이트가 소요됩니다. 그러나 같은 값을 16 진수 ASCII 형식으로 작성하면 16 진수 255의 값이 0xFF이기 때문에 여전히 2 바이트 (또는 "0x"를 앞에두면 4)를 사용합니다. 이것을 기본 이진 형식의 8 비트 바이트 (char
)로 작성하는 것과 비교하십시오. char
은 정의에 따라 1 바이트를 차지하므로 값이 무엇이든 관계없이 이진 형식의 파일은 1 바이트 만 사용합니다.
bmp는 다른 사람이 사용할 수있는 형식의 형식입니다. 사용하려는 경우 일반적으로 bmp 파일을 열 수있는 다른 프로그램도 해당 형식을 읽을 수 있도록 해당 형식으로 작성해야합니다. 오직 당신이 그 파일을 읽을 수 있기를 원한다면, 원하는 포맷으로 파일을 저장하십시오. 그러나 사람들이 다른 포맷으로 잘못 이해할 수있는 방식으로 파일의 이름을 지정하지 마십시오. – PlasmaHH
여기서 바이너리는 텍스트가 아님을 의미합니다. –