Miniblog: 'nuff said
C++, nie całkiem trywialny sposób zapisu danych w formie binarnej
28/08/2007, 12:48:46 | 4 komentarze | Programowanie, Techblog
Ostatnio jakoś, kończąc mój pewien program, chciałem zapisać dane w pliku w formie binarnej. Jakoś mimo że bawię się C++ już od paru lat, nigdy mi nie potrzebna taka opcja była, a jak już to korzystałem z instrukcji put oraz get. Będąc zmuszony pisać w czystym ANSI-C, korzystałem natomiast z dość ciekawych funkcji fread oraz fwrite, które w bardzo prosty sposób pozwalają zapisać dowolną strukturę, w formacie binarnych, w pliku oraz równie prosto ją odczytać, np. (przyjmujemy że hs jest jakąś strukturą, a highscorelist 5 elementową tablicą o typie tej struktury)
FILE *plik;
oraz
plik = fopen("highscores.dat", "w");
fwrite(highscorelist, sizeof(struct hs), 5, plik);
fclose(plik);
int a;
FILE *plik;
plik = fopen("highscores.dat", "r");
if(plik != NULL) /* jeśli plik istnieje i prawidlowo sie otwarł */
{
fread(highscorelist, sizeof(struct hs), 5, plik);
fclose(plik);
}
Chciałem jednak skorzystać z "czysto ceplusplusowych" konstrukcji. Standardowe operatory << oraz >> z klasy fstream, odpadały ponieważ zapisywały one dane na wyjście w sposób tekstowy - sformatowany. Zacząłem coś kombinować z instrukcjami write oraz read. Niestety z nie wiadomych, mi, przyczyn obie funkcje używały do zapisu oraz odczytu typu char, a dokładniej wskaźnika na tablicę z tym typem oraz długością. Próbowałem więc zwykłego rzutowania zmiennej int na zmienną char *, bezskutecznie. Na szczęście korzytając z dobrodziejstw pewnej wyszukiwarki, po jakimś czasie, udało mi się znaleźć rozwiązanie. Tak więc należało użyć zamiast "zwykłego" rzutowania operator reinterpret_cast, specjalnie stworzony do konwertowania niekompatybilnych wskaźników... Korzystając więc z wiedzy przedstawionej w tamtym dokumencie zapis w postaci binarnej, dowolnej zmiennej, w tym przypadku int, wygląda następująco:
plik.write(reinterpret_cast
natomiast odczyt, jak można łatwo wywnioskować
char tmp[4];
Zasadniczo obie czwórki (4) można by zastąpić, i jest to wskazane, siezof(int) lub sizeof(naszint), czego tutaj nie zrobiłem aby sprawy nie komplikować.
plik1.read(tmp, 4);
int naszint = reinterpret_cast
Skrypty Greasemonkey i Style Stylish które używam..,
28/02/2007, 21:17:30 | 3 komentarze | Software, Techblog, WWW
Kiedyś wspominałem o rozszerzeniach które mam w zainstalowane w mojej przeglądarce, co prawda lista ta zmieniła się oczywiście, zwłaszcza że od tamtego czasu minął ponad rok, być może niedługo je tutaj opiszę. Jednak dzisiaj chciałem wspomnieć o przydatnych skryptach do wtyczki Greasemonkey, oraz przydatnych stylach do wtyczki Stylish.
Greasemonkey
Gresemonkey, pozwala używać skryptów JS, które automatycznie uruchamiają się na wybranych stronach. Generalnie całą ideę dokładniej opisał Riddle.

Skrypty GM, które osobiście używam to
- Universal Image Redirector - pozwala przekierować strony pojedynczych obrazków w serwisach je hostingujących takich jak ImageShack na właściwy plik z obrazem.
- Youtube Resizer - powiększa film video na w serwisie Youtube na pełny ekran, opcja ta co prawda jest dostępna standardowo po naciśnięciu odpowiedniego przycisku, jednaj tutaj otrzymujemy to bez takiego wysiłku ;].
- Digg add mirrors - dodaje automatycznie serwery lustrzane do stron linkowanych w serwisie społecznościowym Digg.

Stylish
O rozszerzeniu Stylish można poczytać szerzej na blogu da.kill'i natomiast krótko można powiedzieć że pozwala ono aplikować dla wybranych stron, ale także elementów UI Firefox'a własne style CSS.

Style CSS które używam wraz z rozszerzeniem Stylish to:
- Google Web Search - Dark Blue Redesign - zmienia styl Googla na ładniejszy moim zdaniem niebieski, opisywałem już kiedyś ten styl, dodatkowo używam wersji dla Google.pl (
Znajdź i zamień-> google.com -> google.pl[w skrócie])... - Google Image Search - Dark Gray Redesign - jak wyżej tylko zmienia styl wyszukiwarki obrazków Google'a na czarny...
- Tab Loading - Pozwala ustawić obrazek w czasie ładowania karty (inna wersja z innym obrazkiem).
- Tab: Colored active tab - pozwala ustalić własny kolor dla aktywnej zakładki, dzięki czemu taka aktywna karta jest bardziej widoczna, przydaje się zwłaszcza dla używających stylu LittleFox (który jest prawie-doskonały, ale pewne braki ma).
