mortizz Skrevet 1. desember 2005 Del Skrevet 1. desember 2005 (endret) før brukte jeg å gjøre slik for å fylle opp variablene mine med riktig data: FILE *fil= fopen(fileName, "rb"); fread(&variabel1, 2, 1, fil); fread(&variabel2, 4, 1, fil); fread(&array, 4, 3, fil); fclose(fil); nå leser jeg fila fra en zipfil, og har en variabel som ser slik ut: char* data hvordan skal jeg hente ut variabler fra data på en lignende måte som fra en FILE-peker. liksom den første kodesnutten sier at de 2 første bytene fra (FILE*) fil skal til variabel1, mens nå vil jeg at de 2 første bytene fra (char*) data skal til variabel1, de 4 neste bytene skal til variabel2 osv. edit: har prøvd å forklare litt mindre knotete Endret 2. desember 2005 av mortizz Lenke til kommentar
dayslepr Skrevet 1. desember 2005 Del Skrevet 1. desember 2005 (endret) om du bruker C++ kan du gjøre det enkelt v.h.a. stringstream, slik: stringstream ss("25 lars 21 elisabeth"); string navn; int alder; ss >> navn; ss >> alder; cout << "navn: " << navn << endl; cout << "alder: " << alder << endl; ss >> navn; ss >> alder; cout << "navn: " << navn << endl; cout << "alder: " << alder << endl; i C må du jalla med pekere og/eller sscanf .. Endret 1. desember 2005 av dayslepr Lenke til kommentar
mortizz Skrevet 1. desember 2005 Forfatter Del Skrevet 1. desember 2005 (endret) ja, bruker c++ men, jeg leser fra en binærfil. eksemplet mitt leser første 2 bytes til en bool, (bool er vel egentlig 1byte,men) neste 4 bytes til en float og neste 4*3 bytes til et float array f.eks.. finnes det ikke noe lignende for binærstrenger? bytestream elns? Endret 1. desember 2005 av mortizz Lenke til kommentar
Peter Skrevet 1. desember 2005 Del Skrevet 1. desember 2005 (endret) For å lese direkte inn i en struct, må alle størrelser være definerte i structen. char* name er av ubestemt lengde, i motsetning til char name[64]. Eneste som er definert i din struct er int (4). Dersom du bruker C++ burde du uansett bruke std::fstream etter min mening Endret 1. desember 2005 av Nazgul Lenke til kommentar
mortizz Skrevet 1. desember 2005 Forfatter Del Skrevet 1. desember 2005 (endret) nå misforstår du.. Fila er allerede lest inn i structen, fra en zipfil, men drit i den.. det er data-variabelen som er relevant her, den inneholder dataen til fila. problemet mitt er altså å få forskjellige variabler til å hente ut verdier fra data på samme måte som fra en FILE-stream, eller noe lignende ihvertfall.. (jeg suger til å forklare ass) men for å repetere det jeg skrev i første innlegg. før gjorde jeg slik, da jeg leste inn variablene fra ein FILE-pointer: FILE *fil= fopen(fileName, "rb"); fread(&variabel1, 2, 1, fil); fread(&variabel2, 4, 1, fil); fread(&array, 4, 3, fil); fclose(fil); nå har jeg ikke lenger en FILE-pointer, men en data-variabel av typen char*. finnes det noen metoder for å gjøre noe ala det ovenfor når du kun har tilgang til en peker til minnet (char* data) ? kom gjerne med eksempler! =) Endret 1. desember 2005 av mortizz Lenke til kommentar
Peter Skrevet 1. desember 2005 Del Skrevet 1. desember 2005 (endret) Sjekk ut stringstream, det er nok noe du kan bruke. Altså, std::stringstream definert i <sstream> Endret 1. desember 2005 av Nazgul Lenke til kommentar
mortizz Skrevet 1. desember 2005 Forfatter Del Skrevet 1. desember 2005 (endret) okey, fungerer den med binær-data? slik at jeg kan lese ut en hvis mengde bytes? skal prøve imorgen=) takk for tipset=) Endret 1. desember 2005 av mortizz Lenke til kommentar
kjetil7 Skrevet 1. desember 2005 Del Skrevet 1. desember 2005 men for å repetere det jeg skrev i første innlegg.før gjorde jeg slik, da jeg leste inn variablene fra ein FILE-pointer: FILE *fil= fopen(fileName, "rb"); fread(&variabel1, 2, 1, fil); fread(&variabel2, 4, 1, fil); fread(&array, 4, 3, fil); fclose(fil); nå har jeg ikke lenger en FILE-pointer, men en data-variabel av typen char*. finnes det noen metoder for å gjøre noe ala det ovenfor når du kun har tilgang til en peker til minnet (char* data) ? kom gjerne med eksempler! =) 5239359[/snapback] Du ønsker med andre ord å kopiere data fra en minneblokk som du har en char-peker til? Da kan du bruke memcpy: const char* data; memcpy(&variabel1, data, sizeof(variabel1)); data += sizeof(variabel1); memcpy(&variabel2, data, sizeof(variabel2)); data += sizeof(variabel2); // ... Og et tips er å bruke sizeof-operatoren flittig. Koden blir mye lettere å lese både for deg og spesielt for andre. Å skrive konstanter som et tall er generelt veldig dårlig kodepraksis. Lenke til kommentar
mortizz Skrevet 2. desember 2005 Forfatter Del Skrevet 2. desember 2005 (endret) yes, du traff spikeren på hodet, kjetil7! takk for hjelpa =)=) #define bread(target, buffer) { memcpy(&target, buffer, sizeof(target)); buffer += sizeof(target); } Endret 2. desember 2005 av mortizz Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå