none
取得したHEXデータのファイル書き込みについて RRS feed

  • 質問

  • いつもお世話になっております、鏑木と申します。
    現在Visual Studio 2005にてVC++のプログラムを作成しており、ファイル出力についてお聞きしたい
    ことがあり、質問させていただきました。
    質問したい内容は一定時間間隔でデータ(1バイトのHEXデータを50個)を取得し、その取得したデータを
    ファイルに書き込みたいと思っており、その際に取得したデータを
    fprintf(fp,"%d",data);
    のように書き込んでしまうと、書き込むデータがchar型として書き込んでしまうためか、受信したデータが0x80=128で
    あれば、'1''2''8'と3バイトのデータでファイルに書き込まれてしまうようです。
    これを「0x80」、と1バイトでファイルに書き込むにはどのようにすればよいのでしょうか?
    ネットで調べてみると、バイナリーファイルとして書き込むようにファイルを開いて、fwrite()で書き込めばよいのではないか
    という印象を受けたのですが、そのようにするのでしょうか?
    たとえば、取得したデータをint型の配列DATA[50]に格納し、その配列DATA内のデータを上記のように1バイトとしてファイルに
    書き込むにはどのような処理をすればよいのでしょうか?
    参考となるご意見、よろしくお願いいたします。

    開発環境は
    Windows CE 6.0
    Visual Studio 2005
    です。
    2009年12月22日 2:47

回答

  • 例えば、こんな感じで
    char DATA[50];
    HANDLE hFile = ::CreateFile(...);
    ::WriteFile(hFile, DATA, sizeof(DATA), lpNumberOfBytesWritten, NULL);

    とか
    ofstream fs("hogehoge", ios::out|ios::binary);
    fs.write(DATA, sizeof(DATA));
    
    • 回答としてマーク 鏑木肆星 2009年12月22日 4:55
    2009年12月22日 3:22

すべての返信

  • 例えば、こんな感じで
    char DATA[50];
    HANDLE hFile = ::CreateFile(...);
    ::WriteFile(hFile, DATA, sizeof(DATA), lpNumberOfBytesWritten, NULL);

    とか
    ofstream fs("hogehoge", ios::out|ios::binary);
    fs.write(DATA, sizeof(DATA));
    
    • 回答としてマーク 鏑木肆星 2009年12月22日 4:55
    2009年12月22日 3:22
  • ふるかわあきひと様

    ご回答ありがとうございます。
    なるほどですね。私も考えまして、int型ですと4バイトとなってしまうことと、取得するデータが0~255のうちの数値なので
    int型変数を一度unsigned char型の変数にし、それから
    FILE* fp;
    fp = fopen("data.txt","wb");
    fwrite(DATA,sizeof(unsigned char),sizeof(DATA),fp)
    fclose(fp);

    とすることでバイナリーでファイルへ書き込むことが出来ました。

    参考となるご意見ありがとうございました。


    鏑木
    2009年12月22日 4:55