2010-04-19 80 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); 
};