C/C++

Как считать в виде числа данные из файла, в котором даны восемь байт?

Условия задачи:
Во входном файле дано восемь байт, которые задают два 32-битных знаковых целых числа: в первых четырёх байтах записано число ?, а в последних четырёх — число ?. Нужно
вычислить полусумму этих чисел, округляя полученный результат вниз. Полученную полусумму вывести в выходной файл как 32-битное знаковое целое число. Все три числа заданы
с порядком байтов little-endian
НН
Ник Ник
1 238
ifstream input ("in.txt", ios::binary);
int32_t vol1,vol2; //создаем две переменные
char* it = (char*)&vol1; //делаем указатель на переменную типа чар (ибо байт)
for (int i=0;i<4;i++) it[i] = input.get(); //записываем байты из файла по этому адресу
it = (char*)&vol2; // переходим ко второй переменной
for (int i=0;i<4;i++) it[i] = input.get(); //тоже самое со второй
//после этого vol1 и vol2 состоят из байт считаных из файла

ofstream output ("out.txt" , ios::binary);
int32_t vol = 56043; // ваше число
char * it = (char*)&vol;
for (int i=0;i<4;i++) input.put(it[i]); //записываем 4 байта в файл
ИО
Иван Ожегов
51 416
Лучший ответ
 #include  
#include
#include

#define IN_FILE "file1.txt"
#define OUT_FILE "file2.txt"

#define BYTES_COUNT 8

#define to_int32(bytes) *(int32_t *) (bytes)

static int file_read_bytes(const char *file_name,
uint8_t *bytes,
size_t count)
{
FILE *fp;

if (!(fp = fopen(file_name, "rb"))) {
fprintf(stderr, "%s not found!", file_name);
return 1;
}

fread(bytes, sizeof(uint8_t), count, fp);
fclose(fp);

return 0;
}

static int file_write_bytes(const char *file_name,
const uint8_t *bytes,
size_t count)
{
FILE *fp;

if (!(fp = fopen(file_name, "wb"))) {
fprintf(stderr, "%s not found!", file_name);
return 1;
}

fwrite(bytes, sizeof(uint8_t), count, fp);
fclose(fp);

return 0;
}

int main(void)
{
int32_t result;
uint8_t bytes[BYTES_COUNT];

if (file_read_bytes(IN_FILE, bytes, BYTES_COUNT))
return -1;

result = to_int32(bytes) + to_int32(bytes + 4);
result = (uint32_t) floor(result / 2.0f);

file_write_bytes(OUT_FILE, (uint8_t *) &result, 4);
return 0;
}