0

サーバーから受信したバイナリ データをバイナリ ファイルに書き込む必要があるため、次の関数を記述しました。

int WriteToDataFile1(char buf[])
{
    char szDate[12];
    char szTime[12];
    char buf_buff[2500];
    _strdate( szDate );
    _strtime( szTime );
    memset(buf_buf, 0, sizeof(buf_buff));
    FILE* log = fopen(BufferFilePath11, "a+");
    if (log == NULL)
        return -1;
    fwrite(buf,1,135,log); //working fine
    fclose(log);
    return 0;
}

私は2つの問題を抱えています:- 1) DATE::TIME::DATA IS::DATAのようなバイナリデータを書かなければなりません。私は次のようにすることができません:-

sprintf(buf_buf,"%s::%s::DATA IS::", szDate, szTime,buf);

sprintf は、「buf」でヌル文字に遭遇すると終了します。サーバーからは常に 135 バイトのデータがありますが、17 番目のバイトまたは他のバイトに null 文字がある場合があるため、sprintf はそこで文字列を終了し、完全なバイナリ データを書き込みません。私の2番目の問題は、2回目のWriteToDataFile1()関数の場合でも、2行目に書き込む必要があるfwriteのデータが1行であることです。誰でも解決策を教えてもらえますか。

4

1 に答える 1

2

最初の問題 (sprintf を使用できない) は問題ではなく、意図したとおりに機能しています。sprintf を使用してバイナリ データをバッファに配置することはできません。データを別の方法で配置する必要があります (おそらく memcpy を使用)。

2番目の問題については、データは「1行」です-バイナリファイルを作成していると述べました。ゼロ行があります。行末文字 (\n、\r など) を書きたい場合は、書き込んだ他のデータの後に書き出すことができます。

于 2012-10-01T17:36:50.963 に答える