我在存储二进制字符串时遇到问题。如何以二进制形式将二进制字符串“100010101010000011100”存储在使用C的文件中?
除了一个字符串,如果我有两个字符串,我怎么能将这两个字符串存储在一起? 谢谢你的帮助。
答案 0 :(得分:2)
您可以将8
位填充到unsigned char
变量中并将其写入文件。
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++;
}
答案 1 :(得分:0)
如果是前者,我建议以下资源:
如果是后者,那么有很多编码方法和标准,但坦率地说,我不明白你为什么不按原样存储你的二进制字符串。
编辑:再考虑一下,显而易见的解决方案是将二进制数转换为整数或十六进制并存储它。
答案 2 :(得分:0)
打开文件以便以二进制模式写入。
将二进制字符串转换为整数并将其写入文件
答案 3 :(得分:0)
这个支持任意长度的二进制字符串,但当然有许多不足之处,尤其是在考虑从文件中读回。 :)尽管如此,对于初学者来说应该足够好了。
#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);
};