2010-04-19 3 views
3

이진 문자열을 저장하는 데 문제가 있습니다. 바이너리 문자열 "100010101010000011100"을 바이너리 형식으로 C를 사용하는 파일에 저장할 수 있습니까?바이너리 문자열을 바이너리 형식으로 파일에 저장하는 방법은 무엇입니까?

두 개의 문자열이있는 경우 단 하나의 문자열 외에도 어떻게이 두 문자열을 함께 저장할 수 있습니까? 도움 주셔서 감사합니다.

+1

정수로 변환하고 정수를 저장하십시오. –

답변

0

Erm, 귀하의 질문을 이해할 수 있는지 확실하지 않습니다. C를 사용하여 파일에 문자열을 저장하는 방법을 묻는 중이거나 파일 저장을 위해 이진 데이터를 인코딩하는 가장 좋은 방법을 묻는 중입니까?

이 후자의 경우, 다수의 인코딩 방법 및 기준이 있지만, 솔직히 그렇게하지 :

는 이전의 경우에, 나는 다음과 같은 자원을 제안 바이너리 문자열을 그대로 저장하지 않는 이유를 알아보십시오.

EDIT : 다시 생각해보십시오. 분명한 해결책은 이진수를 정수 또는 16 진수로 변환하고 저장하는 것입니다.

0

이진 모드로 쓰기 위해 파일을 엽니 다.

당신은 unsigned char 변수로 8 비트 물건 및 파일에 그것을 쓸 수있는 파일

+0

Linux에서는 기본적으로 "b"가 무시되므로 바이너리 모드로 쓰기 위해 파일을 열 필요가 없습니다. –

2

에 그 정수로 이진 문자열 변환 및 쓰기.

unsigned char ch=0; 
char bin[] = "100010101010000011100"; 
int i=0; 

while(bin[i]) { 
    if(i%8 == 0) { 
    // write ch to file. 
    ch = 0; 
    }else { 
    ch = ch | (bin[i] - '0'); 
    ch = ch << 1; 
    } 
    i++; 
} 
0

이 사람은 ESP, 임의의 길이의 이진 문자열을 지원하지만, 물론 많은 결함을 가지고있다. 파일에서 다시 읽는 것을 고려할 때. :) 초보자에게는 충분히 좋을 것입니다.

#include <string.h> 
#include <fcntl.h> 
#include <stdlib.h> 

char A[]="111100000000111111"; 

int main() { 
    unsigned int slen = strlen(A); 
    unsigned int len = slen/8 + !!(slen%8); 
    unsigned char * str = malloc(len); 

    unsigned int i; 
    for (i = 0; i < slen; i++) { 
     if (!(i%8)) 
      str[i/8] = 0; 
     str[i/8] = (str[i/8]<<1) | (A[i] == '1' ? 1 : 0); 
    } 
    if (slen%8) 
     str[len-1] <<= (8-slen%8); 

    int f = open("test.bin", O_CREAT | O_TRUNC | O_WRONLY, S_IRWXU); 
    write(f, str, len); 
    close(f); 
}; 
관련 문제