이진 문자열을 저장하는 데 문제가 있습니다. 바이너리 문자열 "100010101010000011100"을 바이너리 형식으로 C를 사용하는 파일에 저장할 수 있습니까?바이너리 문자열을 바이너리 형식으로 파일에 저장하는 방법은 무엇입니까?
두 개의 문자열이있는 경우 단 하나의 문자열 외에도 어떻게이 두 문자열을 함께 저장할 수 있습니까? 도움 주셔서 감사합니다.
이진 문자열을 저장하는 데 문제가 있습니다. 바이너리 문자열 "100010101010000011100"을 바이너리 형식으로 C를 사용하는 파일에 저장할 수 있습니까?바이너리 문자열을 바이너리 형식으로 파일에 저장하는 방법은 무엇입니까?
두 개의 문자열이있는 경우 단 하나의 문자열 외에도 어떻게이 두 문자열을 함께 저장할 수 있습니까? 도움 주셔서 감사합니다.
Erm, 귀하의 질문을 이해할 수 있는지 확실하지 않습니다. C를 사용하여 파일에 문자열을 저장하는 방법을 묻는 중이거나 파일 저장을 위해 이진 데이터를 인코딩하는 가장 좋은 방법을 묻는 중입니까?
이 후자의 경우, 다수의 인코딩 방법 및 기준이 있지만, 솔직히 그렇게하지 :
는 이전의 경우에, 나는 다음과 같은 자원을 제안 바이너리 문자열을 그대로 저장하지 않는 이유를 알아보십시오.
EDIT : 다시 생각해보십시오. 분명한 해결책은 이진수를 정수 또는 16 진수로 변환하고 저장하는 것입니다.
이진 모드로 쓰기 위해 파일을 엽니 다.
당신은 unsigned char
변수로 8
비트 물건 및 파일에 그것을 쓸 수있는 파일
Linux에서는 기본적으로 "b"가 무시되므로 바이너리 모드로 쓰기 위해 파일을 열 필요가 없습니다. –
에 그 정수로 이진 문자열 변환 및 쓰기.
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++;
}
이 사람은 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);
};
정수로 변환하고 정수를 저장하십시오. –