Так что я только недавно начал пробовать 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;
}
Просто следуйте так же:
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 также является еще одной проблемой. Кодирование с плавающей точкой является бинарным и не переносимым (Вот).