powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / вывод в файлы в двоичном режиме, cpp- шные классы +
11 сообщений из 36, страница 2 из 2
вывод в файлы в двоичном режиме, cpp- шные классы +
    #38972242
oop_forever
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White OwlAnatoly Moskovskytchingiz,

Напишите простую обертку, чтобы записывать бинарное представление переменных в поток не морочась преобразованиями.
Типа какого (только отладить)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
template <typename T>
struct as_bin_impl {
  as_bin_impl(const T& val)
    : m_val(val) 
  {
  }
  template <typename Stream> friend Stream& operator<<(Stream& stream, const as_bin_impl& val) {
    stream.write((const char*)&val.m_val, sizeof(val.m_val));
    return stream;
  }
  private:
  const T& m_val;
};

template <typename T> as_bin_impl<T> as_bin(const T& val)
{
    return as_bin_impl<T>(val);
}


...

	ofstream fout("1.bin", ios::binary);
        ....

        int y[2] = {1,2};

        fout << as_bin(y);
 
        fout.close();



ЗЫ. А может такое есть и в стандартной библиотеке, не в курсе.

Код: plaintext
1.
2.
3.
4.
FILE f* = fopen("1.bin", "w");
int y[] = {1,2};
fwrite(y, 1, sizeof(y), f);
fclose(f);



Вывод: С++ намного проше и удобнее чем Си.
- если им не занимаются рукожопые писатели на чистом С
Код: plaintext
1.
2.
3.
4.
	ofstream fout("1.bin", ios::binary);
 int y[2] = {1,2};
 fout<<y[0]<<y[1];
 fout.close(); 
...
Рейтинг: 0 / 0
вывод в файлы в двоичном режиме, cpp- шные классы +
    #38972249
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oop_forever- если им не занимаются рукожопые писатели на чистом С

Вообще-то, перед тем как писать программу принято прочесть и понять техзадание ))
...
Рейтинг: 0 / 0
вывод в файлы в двоичном режиме, cpp- шные классы +
    #38972276
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oop_forever,

Код: plaintext
1.
fout<<y[0]<<y[1];



а что, если мильён целых - то нужно мильён операторов << использовать?

P.S. Si tacuisses, philosophus mansisses.
...
Рейтинг: 0 / 0
вывод в файлы в двоичном режиме, cpp- шные классы +
    #38972345
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oop_forever- если им не занимаются рукожопые писатели на чистом С
Код: plaintext
1.
2.
3.
4.
	ofstream fout("1.bin", ios::binary);
 int y[2] = {1,2};
 fout<<y[0]<<y[1];
 fout.close(); 



рукожопным писателям на грязном с++ видимо, невдомек,
что после работы указанной программы в файле 1.bin
будет не 8 байт с целыми числами 1 и 2, а два байта с символами '1' и '2'
...
Рейтинг: 0 / 0
вывод в файлы в двоичном режиме, cpp- шные классы +
    #38972346
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskytchingiz,

Напишите простую обертку, чтобы записывать бинарное представление переменных в поток не морочась преобразованиями..
сенкс за идею. Меня как человека, измученного нарзаном фортраном устроило
так


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <fstream>
using namespace std;

class oXstream : public ofstream{
public:
//
	oXstream(char *_Filename, ios_base::openmode _Mode) : ofstream(_Filename, _Mode){};
	template<typename TYPE> void write(TYPE* val, size_t count){
		ofstream::write((char*)val, count*sizeof(TYPE));
	}
};


class iXstream : public ifstream{
public:
//
	iXstream(char *_Filename, ios_base::openmode _Mode) : ifstream(_Filename, _Mode){};
	template<typename TYPE> void read(TYPE* buf, size_t count){
		ifstream::read((char*)buf, count*sizeof(TYPE));
	}
};



void main(){
	int b[] = { 1, 2, 3 };
	double c[] = { 3.14, 2.71 };
	oXstream out("1.bin", ios::binary);
	out.write(b, sizeof(b)/sizeof(int));
	out.write(c, sizeof(c)/sizeof(double));
	printf ("28 bytes has been outputed");
	out.close();
	
	b[1]=200;
	c[1]=200.;

	iXstream in("1.bin", ios::binary);
	in.read(b, 3);
	cout << b[0] << ' ' << b[1]<< ' ' << b[2];
	in.read(c, 2);
	cout <<"\n"<< c[0] << ' ' << c[1];


}
...
Рейтинг: 0 / 0
вывод в файлы в двоичном режиме, cpp- шные классы +
    #38972370
oop_forever
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonoop_forever,

Код: plaintext
1.
fout<<y[0]<<y[1];



а что, если мильён целых - то нужно мильён операторов << использовать?

P.S. Si tacuisses, philosophus mansisses.
использовать цикл, если не напрягают нанопотери производительности.
Увы нельзя сделать отдельную обработку для T* и T[n].
Поэтому нужно юзать оболочку:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
template<typename T>
class Slice
{
public:
	Slice(int start_i,int right_nargin_i)
};

template<typename T>
Slice<T> slice(T *ar,int n)
{
	return Slice<T>(0,n);
}

template<typename T>
Slice<T> slice(T *ar,int start_i,int right_nargin_i)
{
	return Slice<T>(start_i,right_nargin_i);
}

template<typename T>
ofstream& operator<<(ofstream& stm,const Slice<T> &);

....

ofstream fout("1.bin", ios::binary);
int y[2] = {1,2};
fout<<slice(y,2);
fout.close(); 
...
Рейтинг: 0 / 0
вывод в файлы в двоичном режиме, cpp- шные классы +
    #38972374
oop_forever
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
oop_forevermaytonoop_forever,

Код: plaintext
1.
fout<<y[0]<<y[1];



а что, если мильён целых - то нужно мильён операторов << использовать?

P.S. Si tacuisses, philosophus mansisses.
использовать цикл, если не напрягают нанопотери производительности.
Увы нельзя сделать отдельную обработку для T* и T[n].
Поэтому нужно юзать оболочку:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
template<typename T>
class Slice
{
public:
	Slice(T* ar, int start_i,int right_margin_i)
};

template<typename T>
Slice<T> slice(T* ar,int n)
{
	return Slice<T>(ar,0,n);
}

template<typename T>
Slice<T> slice(T* ar,int start_i,int right_nargin_i)
{
	return Slice<T>(ar,start_i,right_nargin_i);
}

template<typename T>
ofstream& operator<<(ofstream &stm,const Slice<T> &);

....

ofstream fout("1.bin", ios::binary);
int y[2] = {1,2};
fout<<slice(y,2);
fout.close(); 


поправил
...
Рейтинг: 0 / 0
вывод в файлы в двоичном режиме, cpp- шные классы +
    #38972380
oop_forever
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tchingizoop_forever- если им не занимаются рукожопые писатели на чистом С
Код: plaintext
1.
2.
3.
4.
	ofstream fout("1.bin", ios::binary);
 int y[2] = {1,2};
 fout<<y[0]<<y[1];
 fout.close(); 



рукожопным писателям на грязном с++ видимо, невдомек,
что после работы указанной программы в файле 1.bin
будет не 8 байт с целыми числами 1 и 2, а два байта с символами '1' и '2'
не придирайтесь к мелочам. Создателей стандартной библиотеки тоже нельзя назвать в полной мере пряморукими,
поэтому я её не использую. В Qt(QDataStream) такой трюк работает.
...
Рейтинг: 0 / 0
вывод в файлы в двоичном режиме, cpp- шные классы +
    #38972410
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поставить в один ряд White_Owl и Создателей (Кернигана Ритчи) это не мелочь,
на его месте я бы начал гордиться
...
Рейтинг: 0 / 0
вывод в файлы в двоичном режиме, cpp- шные классы +
    #38972415
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizпоставить в один ряд White_Owl и Создателей (Кернигана Ритчи) это не мелочь,
на его месте я бы начал гордитьсяДа я такой!
...
Рейтинг: 0 / 0
вывод в файлы в двоичном режиме, cpp- шные классы +
    #38974795
Зимаргл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
#include <fstream.h>
#include <strstream.h>

void main()
{

	ofstream fout("1.bin", ios::binary);

        int y[] = {1,2};

	strstreambuf buf((char*)y, sizeof y);
	fout << &buf;

        fout.close();
}


Поправил. Так все же работает.
...
Рейтинг: 0 / 0
11 сообщений из 36, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / вывод в файлы в двоичном режиме, cpp- шные классы +
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]