Условия задачи:
Во входном файле дано восемь байт, которые задают два 32-битных знаковых целых числа: в первых четырёх байтах записано число ?, а в последних четырёх — число ?. Нужно
вычислить полусумму этих чисел, округляя полученный результат вниз. Полученную полусумму вывести в выходной файл как 32-битное знаковое целое число. Все три числа заданы
с порядком байтов little-endian
C/C++
Как считать в виде числа данные из файла, в котором даны восемь байт?
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 байта в файл
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 байта в файл
#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;
}
Похожие вопросы
- Найти сумму цифр чисел, записанных в файл
- Переход на следующую строку при считывании данных из файла в Си
- Как достать числа из бинарного файла и работать с ними? Си
- Нужно найти в бинарном файле введенные пользователем данные.
- С++ Максимум трёх чисел Даны три целых числа. Найдите наибольшее из них (программа должна вывести ровно одно целое число
- Дан текст, в котором имеются числа. Найти их сумму и максимальное число на си
- Даны три числа. Вывести вначале наименьшее, а затем наибольшее из данных чисел. с++
- Как из аудиозаписи получить тело записи в байтах? Без байтов, которые определяют формат аудио файла
- Дана матрица целых чисел 8×8. Найти количество простых чисел в этой матрице
- Даны действительные положительные числа на С++