在C中读取和写入64位64位

时间:2014-02-08 15:19:29

标签: c fopen bit fwrite fread

我有这个超级简单的代码,我读取8字节的块(稍后我会在代码中对它们进行加密),然后将它们写在新文件中。

它运行良好,但最后8个字节不会被写入。知道为什么吗?

#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>

int main()
{
    uint64_t data;
    FILE *input, *output;

    // create output file

    output = fopen("output.txt", "w");

    // read file
    input = fopen("test.txt", "rb");

    if(input)
    {
        while(fread(&data, 8, 1, input) == 1)
        {
            fwrite(&data, 8, 1, output);
        }

        size_t amount;
        while((amount = fread(&data, 1, 8, input)) > 0)
        {
         fwrite(&data, 1, amount, output);
        }

        fclose(input);
        fclose(output);
    }

    return EXIT_SUCCESS;
}

1 个答案:

答案 0 :(得分:2)

fread(&data, 8, 1, input)

尝试将8个字节的一个“项目”读入缓冲区,并返回项目数。 如果从当前位置到EOF的剩余少于8个字节,则返回0.

一种可能的解决方案是读取8个项目,而不是1个字节:

ssize_t amount;
while ((amount = fread(&data, 1, 8, input)) > 0)
{
    fwrite(&data, 1, amount, output);
}

在while块中,您可以检查amount是否为8或更少 加密方法。