zamienić kolejne bity na inta ??

0

Witam poooooooooooooooooomocy :)
Czytam po kolei z pliku za pomocą plik.read(zm, 8) kolejne bajty, jak zamienić odczytaną porcje bajtow na inta?? bo na tych 8 polach jest zapisana wielkość kolejnego pola . durne pytanie ale mi ciagle nie wychodzi.

0
  1. za pierwsza linijke o watek maly wlos do kosza nie polecial..
  2. moze i durne, ale nie takie znowu proste do rozwiazania. w jaki spoosb jest zapisana owa liczba w pliku? te 8 bajtow? to sa cyfry/napis czy tez int zapisany zywcem? w tym drugim przypadku to musialbybyc int64 skoro 8 bajtow
  3. jesli to nie napis a int64 to z jaka kolejnoscia bajtow jest zapisany? jaki endianess? zgdny z Twoim procesorem czy przeciwny?
0

to tekst zapisany na 4 bajtach, dziękuje za wyrozumiałość ,

0

ok, niemniej nie odpowiedziales na najwazniejsza czesc - czy to jest NAPIS czy ZAPIS BINARNY i jesli ten drugi to w jakim endianess

0

napis , dobrze że to przez sieć a nie na żywo bo czuje że po głowie bym dostał, dzieki

0

Piszesz to w C, czy w C++? Jeżeli w C, to możesz:

  1. Wczytać ten napis do tablicy znakowej, a następnie użyć funkcji atoi() albo sscanf() (opis w dokumentacji),
  2. Od razu przy czytaniu z pliku użyć funkcji fscanf()...

Jeżeli czytasz z pliku to przecież wszystko się odbywa tak, jakbyś zawartość tego pliku wklepywał na klawiaturze!

0

c++ , zapisuje do tablicy ale jakieś koszmarne liczby mi wychodzą :/ dzięki

0

Dawno w C++ nie pisałem, ale zdaje się, że to będzie wyglądać po prostu tak:

ifstream plik("plik.txt");
int liczba;
plik >> liczba;
0

tak, dokladnie tak. do tych 3 linijek mozna jeszcze ewentualnie dorzucic na koncu test:
if(plik.fail()) { cout << "tam miala byc liczba, a bylo cos innego!" << endl; }


a koszmarne liczby Ci wychodzily, poniewasz czytales liczby z pliku jako zywe bajty, np:
w pliku (tekst): 123[enter]
rzeczywista zawartosc pliku (bajty): 0x31 0x32 0x33 0x0d 0x0a

jesli teraz ten plik jako bajty wczytasz na chama do int'a to dostaniesz inta rownego 0x3132330d, czyli 825373453 (ew. 0x0d333231, czyli 221458993, zaleznie od endianess procesora)..

tekst, jesli chcesz czytac "recznie", powinno sie wczytywac jako tekst:

char tab[64]; //kawalek pamieci na 64 znaki
plik.read(tab, ilestam);

i w tym momencie okaze sie ze w tab[0] masz '1', w tab[1] masz '2' itd, i tab defacto zawiera napis '123', czyli dokladnie to co bylo w pliku.. teraz skoro masz napis, to mozesz go potraktowac funkcja atoi() itp.

tylko trudno znalezc sens w meczeniu sie tak, skoro istnieje wspomniany operator >> int

1 użytkowników online, w tym zalogowanych: 0, gości: 1