2017-05-15 21 views
0

일부 정보를 텍스트 파일 (.txt 형식)로 저장하려고합니다. 파일 크기를 줄이기 위해 16 비트 이진수의 각 비트를 사용하여 정보를 나타냅니다. 예를 들어, 16 비트 이진수 인 0000 0001 1000 1111의 경우 각 비트의 의미가 다릅니다. 어떤 ASCII 문자는 8 비트 바이너리 수와 동일하기 때문에, 그래서 두 개의 문자 내 16 비트 숫자로 변환하고 저장하려면 :16 비트 2 진수를 2 문자로 변환하여 텍스트 파일로 저장할 수 있습니까?

uint16_t a; 
a = 13 << 10 | 1 << 3 | 2;// a is a 16bit binary number 
char b, c; 
b = (char)(a>>8); 
c = (char)a;// convert a to two characters 

가 그럼 난 텍스트 파일로 b와 c를 저장합니다. 나중에 텍스트 파일을 읽을 때이 두 문자를 16 비트 2 진수로 변환하여 정보를 얻습니다. 문제는 일부 ASCII 문자가 인쇄 가능하지 않다는 것을 알고 있기 때문에 문제가 있는지 궁금합니다. 어떤 대답이라도 대단히 감사하겠습니다!

+0

인쇄 할 수없는 문자는 인쇄하려고 할 때만 문제가됩니다. 또는 인쇄 가능한 문자 만 처리 할 수있는 시스템을 통해 파일을 실행하십시오. 모든 사람들이 그 파일을 바이너리 데이터로 취급하는 한 (실제로이 ASCII라고 부르지 않아야한다. – Thilo

+0

답변 해 주셔서 감사합니다! 문자를 txt 파일에 저장 한 다음 예를 들어 winzip 소프트웨어를 사용하여 압축합니다. 이렇게 할 수 있는지 확실하지 않습니다. – LiuGui

+0

이 파일을 바이너리 파일이라고하고 다른 확장자 인 ".bin"을 사용하면 많은 혼란을 피할 수 있다고 생각합니다. 네가 할 수없는 이유가 있니? –

답변

1

문제가되지 않습니다. 파일이 텍스트 이건 바이너리 이건간에 단지 관례입니다. 그것은 모두 프로그램이 데이터를 해석하는 방법에 따라 다릅니다. 비 유니 코드 인식 텍스트 편집기는 데이터가 "텍스트"인 경우에도 UTF-32로 인코딩 된 텍스트 파일을 열면 횡설수설합니다. 귀하의 프로그램과 유사합니다. .jpg로 파일의 이름을 지정할 수 있으며 프로그램에서 처리하는 방법을 알고있는 한 괜찮습니다.

바이너리 모드로 읽고 쓰십시오. 일부 프로그래밍 언어는 줄 바꿈을 플랫폼의 개행 문자로 바꾸는 것과 같이 "텍스트 모드"에 대해 적은 양의 처리를 수행합니다.

+0

답변 해 주셔서 감사합니다! 또 다른 문제는 문자를 .txt 파일로 저장하면 압축하는 데 소프트웨어 (예 : winzip)를 사용하는 것입니다. 파일을 읽을 때 먼저 압축을 풀고 문자를 16 비트 2 진수로 변환합니다. 나는 이것을 할 수 있다고 생각하니? – LiuGui

+0

방금 ​​그렇게하는 방법을 설명했습니다. 확실히 가능합니다 :). 고려해야 할 한 가지는 winzip이 텍스트 파일을 특별히 처리하는 것입니다. 확장 기능을 보지 않을만큼 똑똑해야하지만, 사용하지 않도록 설정할 수있는 설정이 있으면 좋을 것입니다. –