2016-07-28 9 views
-1

にバイナリ配列を置くために:私は配列を持ってどのようにバイナリファイル

int a[5] = { 1, 0, 0, 1, 1 }; 

テキストファイルにすべての要素を置くためにループを使用して、ファイルのサイズは5バイトになります。だから私はサイズが5ビットになるようにバイナリファイルに5つの要素を配置したい。どうやってやるの?

+0

バイナリファイルに 'fwrite'するだけです。本当に、何が問題なのですか? –

+0

@EugeneSh。元のポストを見てください –

+0

Hm。なぜそれを編集したのですか?編集は明らかに矛盾しています。 @dbush –

答えて

2

ファイルに5つのバイトを書き込みたい場合は、あなたがタイプunsigned charを使用し、バイナリとして出力ファイルを開く必要があります。

#include <errno.h> 
#include <stdio.h> 
#include <stdlib.h> 

int main(void) { 
    unsigned char a[5] = { 1, 0, 0, 1, 1 }; 
    FILE *fp = fopen("filename", "wb"); 
    if (fp == NULL) { 
     fprintf(stderr, "cannot open filename: %s\n", strerror(errno)); 
     exit(1); 
    } 

    if (fwrite(a, 1, 5, fp) != 5) { 
     fprintf(stderr, "cannot write to filename: %s\n", strerror(errno)); 
     fclose(fp); 
     exit(1); 
    } 

    fclose(fp); 
    return 0; 
} 

ご質問はリッテ紛らわしいです:

ので、 5つの要素をバイナリファイルに入れてサイズが5ビットになるようにしたい。

ほとんどのシステムでは、個々のビットを書き込むことができないファイル、ファイルサイズはビット数ではなく、通常は8ビット幅のバイト数で表されます。バイトの5ビットを指定された値に設定できますが、バイトのビット数を決める必要があります...

ビットが最下位から最上位まで番号が付けられている場合、ここで行うことができますこれは:

#include <errno.h> 
#include <stdio.h> 
#include <stdlib.h> 

/* assuming array `a` contains bit values */ 
int a[5] = { 1, 0, 0, 1, 1 }; 

int main(void) { 
    FILE *fp = fopen("filename", "wb"); 
    unsigned char b; 
    if (fp == NULL) { 
     fprintf(stderr, "cannot open filename: %s\n", strerror(errno)); 
     exit(1); 
    } 

    for (int i = 0; i < 5; i++) { 
     b |= a[i] << i; 
    } 
    fputc(b, fp); 
    fclose(fp); 

    return 0; 
} 
+0

私は13のような数字を持っています。そのバイナリ形式は0000 1101です。実際、有効なバイナリ1101だけが必要です。最初の4つのゼロを削除して8ビットを4ビットに減らす必要があります。 – Varrian

+1

@バリアン:あなたの説明はまだ混乱しています。ファイルが4バイトを含み、重要なビット値が最上位から最下位になるようにしますか? – chqrlie

+0

私は自分の間違いを見つけ出すことはできませんビットの任意の数は、ファイルに書き込むことができます。私はファイルに複数のバイトを書き込む必要があります。 – Varrian

関連する問題