2010-04-19 90 views
3

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

除了只有一个字符串,如果我有两个字符串,如何将这两个字符串存储在一起? 感谢您的帮助。

+1

转换为整数,存储整数。 – 2010-04-19 10:05:53

回答

0

呃,我不知道我是否理解你的问题。你是问如何使用C在一个文件中存储一个字符串,还是你问最好的方式来编码文件存储的二进制数据?

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

如果是后者,则有无数的编码方法和标准,但坦白说,我不看看你为什么不直接存储你的二进制字符串。

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

0

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

将您的二进制字符串转换成整数,并写在文件

+0

在Linux上,不需要打开文件以二进制模式写入,因为默认情况下忽略“b”。 – 2010-04-19 10:16:01

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++; 
} 
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); 
}; 
相关问题