如何以二进制形式将二进制字符串存储在文件中?

时间:2010-04-19 10:00:22

标签: c

我在存储二进制字符串时遇到问题。如何以二进制形式将二进制字符串“100010101010000011100”存储在使用C的文件中?

除了一个字符串,如果我有两个字符串,我怎么能将这两个字符串存储在一起? 谢谢你的帮助。

4 个答案:

答案 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)

呃,我不确定我是否理解你的问题。您是否要求使用C将字符串存储在文件中,或者您是否要求对文件存储的二进制数据进行编码的最佳方法?

如果是前者,我建议以下资源:

如果是后者,那么有很多编码方法和标准,但坦率地说,我不明白你为什么不按原样存储你的二进制字符串。

编辑:再考虑一下,显而易见的解决方案是将二进制数转换为整数或十六进制并存储它。

答案 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);
};