Jak w #cpp prawidłowo pobierać z pliku jego kolejną "jednostkę"? To zawsze będzie 8-bitowy bajt jak w getc()? Chciałbym czytać plik binarny "znak po znaku" zakładając, że znaki mogą być 64 bitowe. #programowanie
@CichyGlosZTyluGlowy: żeby być poprawnym w sensie C++, użyj strumieni i wczytuj do jakiegoś uint64t.
jeżeli chcesz być mniej poprawny i być odbierany jako neandertalczyk korzystając wciąż z api z C, najprościej będzie użyć fread() i pilnować rozmiar za pomocą fseek() i ftell().
@CichyGlosZTyluGlowy: To od Ciebie zależy jaką porcję danych chcesz odczytać czy jak to określasz "jednostkę". Plik, który może zawierać znaki 64 bitowe nazywasz binarnym? Najpierw zdefiniuj jak kodowane są dane (Unicode itp.), następnie odczytuj je zgodnie z kodowaniem.
Jeśli mówimy o standardowych implementacjach C++ to int jest najczęściej 32 bitowy. By bezpiecznie wykorzystywać 64bitowe liczby całkowite korzystaj z long'a. Dla uproszczenia załóżmy, że bajt ma zawsze 8 bitów, dzięki czemu wiesz, że chcesz odczytywać po 64/8 = 8 bajtów z pliku i zapisywać je do long'a. To można zrobić na wiele sposobów, jednym z nich jest ten zaprezentowany przez @MamCieNaHita.
By bezpiecznie wykorzystywać 64bitowe liczby całkowite korzystaj z long'a
@podstawczak: Nie wydaje mi się, by była to prawda. Long w standardzie ma jedynie "przynajmniej 32 bity". "Long long" ma "przynajmniej 64 bity". A najbezpieczniej będzie użyć int64_t który ma dokładnie 64-bity.
@CichyGlosZTyluGlowy: Dwa dni temu robiłem coś podobnego i nie znalazłem sposobu żeby odczytać od razu dwa bajty do int16_t (przy użyciu strumieni), więc odczytałem 2 bajty do tablicy char
jeżeli chcesz być mniej poprawny i być odbierany jako neandertalczyk korzystając wciąż z api z C, najprościej będzie użyć fread() i pilnować rozmiar za pomocą fseek() i ftell().
uint64_t value;fread(&value, sizeof(value), 1, fp);
@podstawczak: Nie wydaje mi się, by była to prawda. Long w standardzie ma jedynie "przynajmniej 32 bity". "Long long" ma "przynajmniej 64 bity". A najbezpieczniej będzie użyć int64_t który ma dokładnie 64-bity.
@CichyGlosZTyluGlowy: Dwa dni temu robiłem coś podobnego i nie znalazłem sposobu żeby odczytać od razu dwa bajty do int16_t (przy użyciu strumieni), więc odczytałem 2 bajty do tablicy char