io — запись / чтение двоичных байтов / ints / longs в / из потока файлов в переполнении стека

Так что я только недавно начал пробовать C ++ и уже изучил основы. Все, что я хочу знать, это как я могу записать / прочитать байты / целые / длинные в / из файла.

Прежде всего, я хотел бы сказать вам, зачем мне это нужно. В основном я хочу прочитать данные из файла, который имеет специальный формат. Все данные записаны в двоичном виде в этом файле.

Спецификация формата файла

Я уже написал эту программу на другом языке, и я хотел бы переписать свою программу на C ++. Язык, который я использовал ранее, называется BlitzMax, и в этом языке функции уже реализованы и просто называются WriteByte, ReadByte, WriteInt, ReadInt и т. Д. Если вы, ребята, будете достаточно любезны, чтобы написать (или, по крайней мере, ссылку на источник) функции, которые я нужно, это будет высоко ценится. И если вы напишите их для меня, вы также можете объяснить, как они работают?

Спасибо большое всем, кто мне поможет! 🙂

Редактировать: Здесь, как и требовалось, код, который несколько делает то, что мне нужно. Он записывает int 50 в двоичном виде в файл, но это все, на что я способен. Я до сих пор не могу понять некоторые части (код был найден в Google, я немного отредактировал его). И мне все еще нужен способ записи байтов и длин.

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
int num = 50
ofstream file("file.txt", ios::binary);
file.write(reinterpret_cast<const char *>(&num), sizeof(num));
file.close ();
return 0;
}

-4

Решение

Просто следуйте так же:

int num = 50;
unsigned char x = 9;
float t = 9.0;

ofstream file("file.bin", ios::binary);
file.write(reinterpret_cast<const char *>(&num), sizeof(num));
file.write(reinterpret_cast<const char *>(&x), sizeof(x));
file.write(reinterpret_cast<const char *>(&t), sizeof(t));
file.close ();
return 0;

Еще немного информации о чтение.

Но остерегайтесь проблем переносимости при выполнении двоичного чтения / записи. Проблемы переносимости могут быть связаны с тем, что целое число может быть 4 байта на вашем компьютере и иметь другой размер на другом компьютере. Endianness также является еще одной проблемой. Кодирование с плавающей точкой является бинарным и не переносимым (Вот).

0

Другие решения


По вопросам рекламы [email protected]