У меня есть этот супер простой код, где я читаю блоки из 8 байтов (я буду их шифровать позже в коде), а затем записываю их в новый файл.Чтение и запись 64 бит по 64 бит в C
Он работает хорошо, но за последние 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;
}
Это текстовый файл? Имя 'test.txt' предполагает это. Возможно, есть новые строки, которые вы не считаете, а входной файл не является кратным 8 байтам. Кроме того, вы не должны предполагать CHAR_BIT == 8 или sizeof (uint64_t) == 8 –
да, это простой текстовый файл с некоторыми строками. Это не кратно 8 байтам, не так ли? Возможно, я что-то пропустил. И как может sizeof (uint64_t) отличаться от 8? –
Если вы работаете с машиной с 64-разрядными символами, sizeof (uint64_t) может быть 1. Если размер вашего входного файла не кратен 8, то ваш цикл будет введен в одно время слишком мало, так как fread возвращает 0 когда осталось недостаточно данных для выполнения запрошенного размера. –