| imho.ws |
![]() |
|
|
|
# 1 |
|
Full Member
Регистрация: 11.12.2002
Сообщения: 864
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
как записать bitset в бинарной форме?
чего-то туплю.
Код:
#include <bitset>
using namespace std;
.....
bitset<8000> bs;
ofstream myfile;
myfile.open ("c:\\example.bin", ios_base::binary);
myfile << bs;
myfile.close();
return 0;
А, самый цимес. В связи с большим размером сета, .to_ulong() кидает throw. Последний раз редактировалось crawler; 21.02.2008 в 19:04. |
|
|
|
|
# 2 |
|
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Полагаю Вам нужно перегрузить
std::ostream& operator<<(std::ostream& s, bitset<8000>& b) Ну как-то так: Код:
#include <fstream>
#include <iostream>
#include <bitset>
using namespace std;
typedef std::bitset<8000> myBitset;
std::ostream&
operator<<(std::ostream& s, myBitset& b){
std::string tmpStr(b.to_string());
for (size_t i = 0; i<tmpStr.length(); i+=8*sizeof(char)){
std::bitset<8*sizeof(char)> tb(tmpStr, i, 8*sizeof(char));
s << (char)tb.to_ulong();
}
return s;
};
int main(){
myBitset bs(65);
ofstream myfile;
myfile.open ("example.bin");
myfile << bs;
myfile.close();
return 0;
}
Самый что?? А что исключение - так резонно вполне, переполнение на таком размере очень даже вероятно.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. |
|
|
|
|
# 3 |
|
Full Member
Регистрация: 11.12.2002
Сообщения: 864
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
цимес - это национальное еврейское блюдо, из вареной моркови и изюма, сладенькое такое. по каким-то непонятным причинам считается деликатесом.
исключение - из-за того что размер битсета превышает "unsigned long". Так что действительно резонно. Я сначала хотел добавить преобразование в vector<unsigned long> и писть его, но так тоже неплохо. Правильность проверю в послезавтра на работе, но за наводку - большой спасиб. |
|
|
|
|
# 4 | |
|
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
За экскурс спасибо, что-такое цимес не знал
Расширяю кругозор так сказать.Цитата:
Да, ну и вообще я конечно проверял приведенный пример, в принципе он конечно же работает, хотя конечно может чего-то и не учел до конца - утверждать не буду, набросан на скорую руку.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. |
|
|
|
|
|
# 5 | |
|
Full Member
Регистрация: 11.12.2002
Сообщения: 864
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Смысл был в том, что внутреннее представление у битсета идет именно в "unsigned long", и именно чтобы не делать лишних преобразований. Со всем остальным полностью согласен.
Цитата:
|
|
|
|
|
|
# 6 | |
|
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
![]() Думаю в этом случае просто используется нечто вроде vector<bool> или подобные конструкции. Но подозвеваю что для количества бит помещающегося в длинное целое для оптимизации наиболее вероятно какраз представлена подобная специализация данного шаблона в STL (не утверждаю правда что это именно так). Никаких обид - конечно надо тестировать! Мало ли чего на форуме понапишут
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. |
|
|
|
|
|
# 7 | |
|
Full Member
Регистрация: 11.12.2002
Сообщения: 864
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
это вырезка из кода: Код:
// TEMPLATE CLASS bitset
template<size_t _Bits>
class bitset
{ // store fixed-length sequence of Boolean elements
typedef unsigned long _Ty; // base type for a storage word
enum {digits = _Bits}; // extension: compile-time size()
...............
private:
enum
{ // parameters for packing bits into words
_Bitsperword = CHAR_BIT * sizeof (_Ty), // bits in each word
_Words = _Bits == 0
? 0 : (_Bits - 1) / _Bitsperword}; // NB: number of words - 1
_Ty _Array[_Words + 1]; // the set of bits
};
П.С. Можно на "ты" ? П.П.С. а код таки рабочий
Последний раз редактировалось crawler; 24.02.2008 в 11:30. |
|
|
|