Бинарная запись на C ++, как это реализовать? - PullRequest
0 голосов
/ 05 августа 2020

Обновление: все еще ни одна игра мне не ответила на мой главный вопрос, как сохранить строковый символ char или в целом (я хочу игнорировать последний Null)?

Сегодня я узнал что-то новое, что мне было непонятно.

Я знаю, как сохранять данные как двоичные в файл, сначала я открываю его вот так: хочу написать число, я делаю следующее:

outfile.write((const char*)&num, sizeof(int));

Но как насчет того, чтобы написать string, как я могу это сделать? char на char, или есть более быстрый метод? Плюс какой должен быть размер?

1 Ответ

1 голос
/ 05 августа 2020

Но как насчет записи строки, как я могу это сделать? char на char, или есть более быстрый метод? Кроме того, каков должен быть его размер?

вы можете использовать метод c_str () в std :: string, чтобы получить массив символов внутри строкового объекта, как он возвращает const char * и тот же тип в параметрах file.write () . А для размера вы можете получить размер строки, используя метод length () из std :: string. код может быть таким:

string mystr = "hello world";
outfile.write(mystr.c_str(), mystr.length());

А для

outfile.write((const char*)&num1, sizeof(unsigned int));

он что-то сохраняет, но это не ваше целое число, он не сохраняет его. вы можете попробовать это:

outfile.write(reinterpret_cast<char*>(&num1), sizeof(num1));

, и если это не сработает, вам нужно вручную сохранить целое число в массиве символов и записать его в файл. вы можете преобразовать свой int в char, используя char * _itoa (int value, char * str, int base); и для char * str size вы можете выделить столько символов, сколько di git у вас есть в вашем целочисленном.

PS: функция _itoa принадлежит C, поэтому для его использования в C ++ может потребоваться определение _CRT_SECURE_NO_WARNINGS в препроцессорах

...