構造体変数のバイナリ出力について

解決


xyz  2006-01-18 03:33:38  No: 60325

おせわになります。

下記のように構造体データをバイナリファイルに出力
する処理を行っています。

struct stKouzo
{
    int    i;
    char   a[40];
    char   b[20];
    char   c[20];
    char   d[6];
    int   j;
}

stKouzo Kouzo;    //構造体変数

//Kouzoの変数に値を代入
Kouzo.i = 5;
   ・
   ・(省略)
   ・

FILE *file;
file = fopen("c:\tmp" , "wb");      //バイナリモードでファイル開く
fwrite(&Kouzo,94,1,file);          //バイナリファイルに書き込む
fclose(file);                      //ファイルを閉じる

上記のコードで出力されたバイナリファイルを確認したところ、
構造体の「j」のデータの前に、16進表示で「CCCC」と、
4バイトのデータが勝手に挿入されてしまいます。

原因がわからなくて困っているので、
どなたか助けてください。
よろしくお願いします。


瀬戸っぷ  2006-01-18 03:48:18  No: 60326

過去ログですが……

http://madia.world.coocan.jp/vc/vc_bbs/200407_04070025.html


xyz  2006-01-18 04:27:47  No: 60327

ありがとうございます。

無事解決できました。
関連でもう一点教えてください。

stKouzo型構造体の配列を宣言し、
以下のように、バイナリファイルとして出力すると、
バイナリファイルの先頭に、4バイトのデータ「0200」
が挿入されてしまいます。

回避方法がありましたら
おしえてください。
よろしくおねがいします。

CArray<stSENRO_JOUSU, stSENRO_JOUSU> m_stKouzo; //stKouzo型構造体の配列

CFile file;
//ファイルを開く
file.Open
       (strTDataFileName , CFile::modeCreate | CFile::modeWrite);

//アーカイブ構築
CArchive ar(&File, CArchive::store);

//書き込み
m_stKouzo.Serialize(ar);

//閉じる
ar.close;
file.close;


HG  2006-01-18 04:51:04  No: 60328

CArray::Serializeは配列サイズを書き出すからです。
CArray::GetData()とCArchive::Write()を使えばいいでしょう。


xyz  2006-01-18 05:21:53  No: 60329

回答ありがとうございました。

大変たすかりました。

最悪、配列でループし、
構造体の各変数に1つずつ
データを書き出す処理をするところでした。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加