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;
}

我遇到了两个问题:- 1)我必须编写像 DATE::TIME::DATA IS::DATA 这样的二进制数据。我无法执行以下操作:-

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

因为 sprintf 将在遇到“buf”中的空字符时终止。服务器总是有 135 字节的数据,但有时第 17 字节或其他字节有空字符,因此 sprintf 将终止字符串,我不会写入完整的二进制数据。我的第二个问题是 fwrite 我的数据是一行,即使第二次 WriteToDataFile1() 函数,而我应该写在第二行我可以告诉解决方案。

4

1 回答 1

2

您的第一个问题(无法使用 sprintf)不是问题,它按预期工作。您不能使用 sprintf 将二进制数据放入缓冲区。您需要以另一种方式将数据放在那里(可能使用 memcpy)。

至于你的第二个问题,数据是“一行”——你说你正在写一个二进制文件;有零线。如果你想写一个行终止字符(\n、\r 等),那么你可以在你写的其他数据之后把它写出来。

于 2012-10-01T17:36:50.963 回答