Serwis Edukacyjny Nauczycieli w I-LO w Tarnowie ![]() Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej
Autor artykułu: mgr Jerzy Wałaszek |
©2023 mgr Jerzy Wałaszek
|
SDL_RWread
SPIS TREŚCI |
Rozdział jest tłumaczeniem oryginalnej instrukcji dla biblioteki SDL2.
Użyj tej funkcji, aby odczytać dane ze strumienia.
size_t SDL_RWread(struct SDL_RWops* context, void* ptr, size_t size, size_t maxnum) |
context | wskaźnik do struktury SDL_RWops. |
ptr | wskaźnik bufora, do którego zostaną wprowadzone odczytane dane. |
size | rozmiar w bajtach każdego obiektu do odczytania. |
maxnum | maksymalna liczba obiektów do odczytania. |
SDL_RWops *rw = SDL_RWFromFile("test.bin","r"); if (rw != NULL) { extern Uint8 buf[256]; SDL_RWread(rw, buf, sizeof (buf), 1); SDL_RWclose(rw); } |
char* file_read(const char* filename) { SDL_RWops *rw = SDL_RWFromFile(filename, "rb"); if (rw == NULL) return NULL; Sint64 res_size = SDL_RWsize(rw); char* res = (char*)malloc(res_size + 1); Sint64 nb_read_total = 0, nb_read = 1; char* buf = res; while (nb_read_total < res_size && nb_read != 0) { nb_read = SDL_RWread(rw, buf, 1, (res_size - nb_read_total)); nb_read_total += nb_read; buf += nb_read; } SDL_RWclose(rw); if (nb_read_total != res_size) { free(res); return NULL; } res[nb_read_total] = '\0'; return res; } |
SDL_RWread() jest w rzeczywistości makrem, które odpowiednio wywołuje metodę odczytu strumienia SDL_RWops, aby uprościć tę operację w aplikacji.
Uint32 buffer[10]; SDL_RWread(rwop, buffer, sizeof(Uint32), 10); |
To odczyta 40 bajtów danych i umieści je w buforze 'buffer', który został przygotowany do przechowywania 32-bitowych liczb całkowitych. Każda liczba typu Uint32 ma długość 4 bajtów, czyli 32-bitów
Uint32 buffer[10]; SDL_RWread(rwop, buffer, sizeof(Uint64), 10); |
To odczyta 80 bajtów danych i umieści je w buforze 'buffer', który jest zaprojektowany teraz do przechowywania 64-bitowych liczb całkowitych (wartości typu Uint64). Każda liczba Uint64 ma długość 8 bajtów, a my odczytujemy ich 10 (co pokazuje definicja buffer[10] przy jego tworzeniu).
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2023 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.