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

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

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

您可以将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++; } 

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

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

  • C文件I / O.
  • WriteFile函数(MSDN)

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

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

打开文件以便以二进制模式写入。

将二进制字符串转换为整数并将其写入文件

这个支持任意长度的二进制字符串,但当然有很多不足之处,尤其是 在考虑从文件中读回。 :)尽管如此,对于首发应该足够好了。

 #include  #include  #include  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); };