Jak zapisać liczbę int do pliku binarnie, żeby liczb 1 i np. 12645634 zajmowały jedna i druga po 8 bitów?
Wiecie o co chodzi
Jak zapisać liczbę int do pliku binarnie, żeby liczb 1 i np. 12645634 zajmowały jedna i druga po 8 bitów?
Wiecie o co chodzi
Niestety nie wiadomo o co chodzi, poniewaz w bajcie mozesz zapisac tylko 255 wartosci ;p
właśnie o to mi chodzi.
mam liczbę 45 i chce ją zapisać w pliku o rozmiarze 1 bajta, a nie jak standardowo 2 bajtów.
Jak to zrobić?
W jakim obecnie używanym kompilatorze int ma 2 bajty? Po prostu użyj char?
mam takie coś
int a;
a=123;
ofstream we("nowy.txt",ios::binary);
we<<a;
we.close();
cout<<a<<endl;
i teraz plik ma rozmiar 3 bajtów.
jeden bajt ma rozmiar 255 i teraz chce aby ta zmienna a byłą zapisana w jednym bajcie.
wiecie już co chodzi?
Dobra juz wiem ocb.
int liczba = 23123123;
for(i = 0; i < 4; i++)
fprintf(fp, "%c", liczba & 0xFF000000 >> i * 8);
Dobra jednak nie wiem. Pisalem posta, a Ty w tym czasie dodales.
Liczbe masz zapisana w jednym bajcie, a ze otwierasz plik txt to on ma dwa bajty pierwsze TX z tego co pamietam.
No właśnie nie wiesz... żeś zmienił endiany, zapis przez << jest zawsze w formie tekstu, nie binarnej.
char zuo = 69;
ofstream fout("zuo.bin");
fout.write(&zuo, sizeof(zuo));
Dobra wycofuje tamto nie ma zadnego TX, Świętowit ma racje.
wielkie dzięki, a jak to prawidłowo wczytać?
żeby uzyskać tą liczbę?
Zgodnie z logiką - zamienić write na read?
wow bez przesady tak głupi to nie jestem
napisałem takie coś i nie działa
char zuo;
ifstream fout("zuo.bin");
fout.read(zuo, 1);
Coś słabo z tym zamienianiem - read(&zuo, 1);
wiem, że tak trzeba ale nie działa.
próbowałem wczytanie binarnie, przez wskaźnik itp. na różne sposoby i nie działa.
Może to źle wyświetlam bo robię to przez
cout<<zou;
cout << int(zuo); ?
dzięki naprawdę [browar] należy cię
Pamiętaj, że char to tak typ znakowy jak i numeryczny, żeby tego normalnie używać to albo musisz rzutować po wczytaniu albo do inta przypisać. Typy mają różnie rozmiary nie bez powodu.
sorka, ale jeszcze jedna żecz męczy mnie, a co z większymi liczbami typu 23544325?
jaki je zapisać
Tak jak poprzednie tylko jako int zamiast char? No ale będą już wtedy zajmować 4 bajty.
ale jak zapisać int przez write?
bo u mnie nie idzie.
byś mógł mi to napisać i daje ci spokój
{ // zapis
int zuo = 69666;
ofstream fout("zuo.bin", ios::binary);
fout((char *)&zuo, sizeof(zuo));
}
{ // odczyt
int zuo = 0;
ifstream fin("zuo.bin", ios::binary);
fin((char *)&zuo, sizeof(zuo));
cout << "zuo = " << zuo << endl;
}
a po co i czym jest znaczek &.
ja go tylko znam jak referencja lub przekazanie adresu, a takiego czegoś nie widziałem
No bo służy pobraniu adresu? Funkcja write oczekuje adresu danych, typu char *, oraz ilości danych do zapisania. Tą samą funkcją zapisuje się struktury, tablice, prawie wszystko.
jak dam liczbę 10 cyfrową to wyskakuje błąd 13 "[Warning] this decimal constant is unsigned only in ISO C90 "
w dev
nawet jeśli dam long long int
Dodaj ll na końcu literału - 1234567890ll. Inna sprawa, że w C++ nie ma long long, jest jedynie w C... Weź człowieku jakąś książkę i poczytaj o podstawach.
dobra mam wiem, żę long long jest źle ale w c++ jest
_int64
Nie, w C++ nie ma, jest w rozszerzeniach konkretnego kompilatora. W C++ w ogóle nie ma typów o określonych rozmiarach, nawet char nie musi mieć rozmiaru bajtu.