Reading and writing 64bits by 64 bits in C

我的未来我决定 提交于 2019-12-25 02:07:16

问题


I have this super simple code where I read blocks of 8 bytes (I will encrypt them later in the code) and then write them down in a new file.

It works well but for the last 8 bytes which don't get written. Any idea why?

#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:


fread(&data, 8, 1, input)

tries to read one "item" with 8 bytes into the buffer, and returns the number of items. If less than 8 bytes are left from the current position to EOF, it returns 0.

One possible solution would be to read 8 items à 1 byte instead:

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

Inside the while-block you can then check if amount is 8 or less, for your encryption method.



来源:https://stackoverflow.com/questions/21647735/reading-and-writing-64bits-by-64-bits-in-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!