0

バイナリでファイルに出力したいフロートの配列があります。私の関連コードは次のとおりです。

    FILE *binFile;

    binFile = fopen(fileName, "wb");

    if (binFile)
    {
          fwrite(completeList, sizeof(float), size, binFile);
    }

ここで、completeList は先ほど説明した浮動小数点数の配列へのポインターであり、size は要素の数を示すもう 1 つのパラメーターです。

これがバイナリ ファイルに出力されると、そのファイルを開くと、多数のランダムな ASCII 文字が表示されます。私はこれが私が期待すべきことであることを知っていますが、16進エディタに入れると、ランダムながらくたが表示されます。

私は何を間違っていますか?

編集:

私の解析コード:

    FILE *bofFile = fopen(file, "rb");

    if(bofFile)
    {
        float *tempArray;

        fseek(bofFile, 0, SEEK_END);

        unsigned long int size = ftell(bofFile) / sizeof(float);

        tempArray = (float *)malloc(size);

        fread(tempArray, sizeof(float), size, bofFile);

        std::cout << tempArray[0];
    }
4

2 に答える 2

2

これが関連しているかどうかはわかりませんが、かなり深刻な問題があります。

tempArray = malloc(size);

バッファ オーバーランを防ぐために、次のように変更する必要があります。

tempArray = malloc(size * sizeof(float));

ああ、また、読む前にファイルの先頭に戻るのを忘れていました(それが「何も与えない」理由です):

fseek(bofFile, 0, SEEK_SET);
于 2012-09-27T04:35:38.383 に答える
0

入力ファイルはどのようにフォーマットされていますか? あなたのコードは、テキスト エディターで表示したときに「ランダム」に見えることを前提としています。入力ファイルからデータを正しく読み取っていることを確認するために、配列全体を表示しようとしましたか? また、他の誰かが指摘した malloc() の問題があります。

IEEE 浮動小数点形式のバイナリ表現は直感的ではなく、ランダム データのように見えます。

于 2012-09-27T04:55:58.390 に答える