Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / вывод в файлы в двоичном режиме, cpp- шные классы + / 25 сообщений из 36, страница 1 из 2
28.05.2015, 17:45
    #38971099
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод в файлы в двоичном режиме, cpp- шные классы +
в принципе в файле получается два целых, но не нравится
необходимость мои массивы преобразовывать к указателю на символы.
Похоже я не могу взять правильный класс?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
	ofstream fout("1.bin", ios::binary);
        ....

        int y[2] = {1,2};
        char * py =  (char *)y;

        fout.write(py, sizeof(int)*2);
 
        fout.close();
...
Рейтинг: 0 / 0
28.05.2015, 17:46
    #38971100
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод в файлы в двоичном режиме, cpp- шные классы +
всю жизнь делал через FILE *, а тут приспичило по сиплюсовски.
...
Рейтинг: 0 / 0
28.05.2015, 17:47
    #38971101
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод в файлы в двоичном режиме, cpp- шные классы +
Еще не пятница...
...
Рейтинг: 0 / 0
28.05.2015, 17:55
    #38971108
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод в файлы в двоичном режиме, cpp- шные классы +
tchingizне нравится необходимость мои массивы преобразовывать к указателю на символы.


Нет, всё верно, преобразование заложено by design.
Вместо void* они просто использовали char*.
Оба байт -- так что всё едино.
...
Рейтинг: 0 / 0
28.05.2015, 18:05
    #38971121
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод в файлы в двоичном режиме, cpp- шные классы +
MasterZiv,
1.
спасибо, полегчало на душе
(а то я уже начал склонятся к состоянию
стою на асфальте я в лыжи обутый...).
2
тю, а перегрузок
write (int * pint, size_t numberOfElementsOfIntArraY );
нету?
...
Рейтинг: 0 / 0
28.05.2015, 18:30
    #38971143
Зимаргл
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод в файлы в двоичном режиме, cpp- шные классы +
Код: plaintext
1.
2.
	strstream buf((char*)y, sizeof y, 0);
	fout << buf;
...
Рейтинг: 0 / 0
28.05.2015, 18:56
    #38971162
Зимаргл
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод в файлы в двоичном режиме, cpp- шные классы +
не, что то бред получается (
...
Рейтинг: 0 / 0
28.05.2015, 19:35
    #38971184
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод в файлы в двоичном режиме, cpp- шные классы +
Зимарглне, что то бред получается (
Да, нолик лишний )
...
Рейтинг: 0 / 0
28.05.2015, 19:50
    #38971189
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод в файлы в двоичном режиме, cpp- шные классы +
tchingiz,

Напишите простую обертку, чтобы записывать бинарное представление переменных в поток не морочась преобразованиями.
Типа какого (только отладить)
Код: 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();



ЗЫ. А может такое есть и в стандартной библиотеке, не в курсе.
...
Рейтинг: 0 / 0
28.05.2015, 22:17
    #38971279
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод в файлы в двоичном режиме, cpp- шные классы +
tchingiz.).
2
тю, а перегрузок
write (int * pint, size_t numberOfElementsOfIntArraY );
нету?

нету, мы же не на Java пишем....
...
Рейтинг: 0 / 0
28.05.2015, 23:10
    #38971314
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод в файлы в двоичном режиме, cpp- шные классы +
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.
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);



Вывод: С++ намного проше и удобнее чем Си.
...
Рейтинг: 0 / 0
29.05.2015, 11:27
    #38971644
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод в файлы в двоичном режиме, cpp- шные классы +
White_Owl++
...
Рейтинг: 0 / 0
29.05.2015, 13:12
    #38971767
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод в файлы в двоичном режиме, cpp- шные классы +
White Owl
Код: plaintext
1.
2.
3.
4.
FILE f* = fopen("1.bin", "w");
int y[] = {1,2};
fwrite(y, 1, sizeof(y), f);
fclose(f);

Вывод: С++ намного проше и удобнее чем Си.ошибочка в код закралась, правда ;)
...
Рейтинг: 0 / 0
29.05.2015, 13:38
    #38971809
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод в файлы в двоичном режиме, cpp- шные классы +
White OwlВывод: С++ намного проше и удобнее чем Си.
Согласен.
Вот это
Код: plaintext
1.
fout << as_bin(y);


намного проще, понятнее и удобнее, чем
Код: plaintext
1.
fwrite(y, 1, sizeof(y), f);


Особенно, если учесть что в реальной программе должна быть обработка ошибок, и в С надо каждый write оборачивать в эту обработку, а в С++ достаточно в конце серии write один раз проверить ошибку.

egorychошибочка в код закралась, правда ;)
А в чем ошибка?
...
Рейтинг: 0 / 0
29.05.2015, 13:40
    #38971816
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод в файлы в двоичном режиме, cpp- шные классы +
Anatoly MoskovskyА в чем ошибка?есть уверенность, что sizeof( int ) == 1? у меня - нет ))
...
Рейтинг: 0 / 0
29.05.2015, 13:53
    #38971829
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод в файлы в двоичном режиме, cpp- шные классы +
egorychAnatoly MoskovskyА в чем ошибка?есть уверенность, что sizeof( int ) == 1? у меня - нет ))
А там не size а кол-во.
Главное чтобы 2 и 3 аргументы при перемножении давали размер записываемого буфера.
В данном случае это так.
Конечно, обычно принято вначале указывать размер элемента, а потом количество, как это описано в прототипе функции, но от перемены мест произведение не меняется.
Меняется только код ошибки. Но если проверять на != 0 то и это не имеет значения.
...
Рейтинг: 0 / 0
29.05.2015, 13:58
    #38971837
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод в файлы в двоичном режиме, cpp- шные классы +
Anatoly Moskovskyне имеет значения.
Но, согласен, данный пример демонстрирует отличную читабельность кода на С
...
Рейтинг: 0 / 0
29.05.2015, 14:29
    #38971871
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод в файлы в двоичном режиме, cpp- шные классы +
Anatoly MoskovskyНо, согласен, данный пример демонстрирует отличную читабельность кода на С да, я именно это и имел ввиду ))
...
Рейтинг: 0 / 0
29.05.2015, 15:58
    #38971969
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод в файлы в двоичном режиме, cpp- шные классы +
На гипотетическом json-dsl

Код: javascript
1.
2.
3.
4.
5.
{
    "1.bin": {
		"write": [1,2]
	}
}
...
Рейтинг: 0 / 0
29.05.2015, 16:05
    #38971978
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод в файлы в двоичном режиме, cpp- шные классы +
mayton,

Плохой АПИ. Не хватает идемпотентности. Декларативный язык все-таки
...
Рейтинг: 0 / 0
29.05.2015, 16:12
    #38971985
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод в файлы в двоичном режиме, cpp- шные классы +
Перед DSL не ставится задач идемпотентностей. Это первое.

И второе... я-же не раскрыл тайну свойства "write"... возможно оно
не меняет вселенную а создаёт новую....
...
Рейтинг: 0 / 0
29.05.2015, 17:03
    #38972044
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод в файлы в двоичном режиме, cpp- шные классы +
maytonПеред DSL не ставится задач идемпотентностей.
Перед DSL не ставится никаких задач - это просто аббревиатура ))
...
Рейтинг: 0 / 0
29.05.2015, 17:05
    #38972046
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод в файлы в двоичном режиме, cpp- шные классы +
Ох уж эти пятничные дискурсы...
...
Рейтинг: 0 / 0
29.05.2015, 17:10
    #38972054
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод в файлы в двоичном режиме, cpp- шные классы +
maytonОх уж эти пятничные дискурсы...это вам не простые числа в системе счисления Фибоначчи находить, это вечные ценности ;)
...
Рейтинг: 0 / 0
29.05.2015, 17:16
    #38972060
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вывод в файлы в двоичном режиме, cpp- шные классы +
А я вить систему счисления Фибоначчи пилил. Мдя.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / вывод в файлы в двоичном режиме, cpp- шные классы + / 25 сообщений из 36, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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