evgeny Skrevet 27. mai 2008 Skrevet 27. mai 2008 Hei. Jeg har en CString file; som inneholder en fil i birnært format. Jeg må kunne lagre denne binær dataen til harddisken. Noen eksempler på nettet? Jeg finner ikke noe med google. Takk på forhånd
GeirGrusom Skrevet 27. mai 2008 Skrevet 27. mai 2008 (endret) hvorfor legger du binærdata i en string? Problemet her er at CString er ikke ment for å lagre binærdata i, og kan skape problemer på grunn av at CString er unicode eller multibyte strings. Noe som betyr at lengden på en CString er ikke nødvendigvis antall byte i teksten. Dermed kan du miste data ved å lagre binærdata i en string når du skal hente dette tilbake igjen. bruk et char array istedet. edit: for å gjøre det litt mer klart: en unicode bokstav kan ta 1, 2 eller 4 byte. Endret 27. mai 2008 av GeirGrusom
evgeny Skrevet 27. mai 2008 Forfatter Skrevet 27. mai 2008 ok char array. men har du noen eksempler hvornda man lagrer dataen til harddisk?
Mr.Garibaldi Skrevet 27. mai 2008 Skrevet 27. mai 2008 (endret) ok char array. men har du noen eksempler hvornda man lagrer dataen til harddisk? Ta en titt her, den går igjennom fil io i c, og hvordan du skriver til fil. (Strengt tatt alt du trenger å gjøre er å åpne filen du vil skrive til, og bruke fprintf for dataene og lukke filen) Endret 27. mai 2008 av Mr.Garibaldi
teflonpanne Skrevet 27. mai 2008 Skrevet 27. mai 2008 Men husk å åpne den med "wb", b står for binary mode
evgeny Skrevet 27. mai 2008 Forfatter Skrevet 27. mai 2008 I det eksempelet leser den fra fil men jeg må lese fra CString eller char array da. jeg kan jo ikek skrive ifp = fopen( arrayname, mode); Please hjelp hehe
evgeny Skrevet 27. mai 2008 Forfatter Skrevet 27. mai 2008 (endret) jeg har gjort på denne måten men filen som jeg skriver til forblir på 0kb FILE *file = fopen("c:\\test.pdf", "wb"); fprintf(file, pdfBinary); pdfBinary er en CString og den inneholder masse data under debugging. Noe jeg gjør gærnt her? EDIT: Det ser ut som dataen i pdfBinary er herpa. Ligger bare 2k med data der. Må finne ut av dette først. Endret 27. mai 2008 av evgeny
Mr.Garibaldi Skrevet 27. mai 2008 Skrevet 27. mai 2008 (endret) FILE* infile = fopen("c:\\binary.file", "rb"); if(infile == NULL){ std::cerr << "input file not opened" << std::endl; } char input[128]; fread(input, 1, 128, infile); fclose(infile); FILE* outfile = fopen("output.binary", "wb"); if(outfile == NULL){ std::cerr << "output file not opened" <<std::endl; } fwrite(input, 1, 128, outfile); fclose(outfile); char verify[128]; infile = fopen("output.binary", "rb"); fread(verify, 1, 128, infile); fclose(infile); for(int i = 0; i < 128; i++){ if(input[i] != verify[i]) { std::cerr << "feil nr " << i << std::endl; }else{ //warning, this can cause problems.... std::cerr << input[i] <<std::endl; } } std::cerr<<"It-works.com :)" <<std::endl; Beklager, jeg kom med en feil anbefaling tidligere, du bør bruke fwrite, ikke fprintf... Men koden over fungerer helt fint. Endret 27. mai 2008 av Mr.Garibaldi
Emancipate Skrevet 1. juni 2008 Skrevet 1. juni 2008 edit: for å gjøre det litt mer klart: en unicode bokstav kan ta 1, 2 eller 4 byte. Ikke i en CString som er unicode. Der tar hvert tegn akkurat 2 byte (d.v.s. at CString bruker UCS2). Hvis du lagrer unicode som UTF-8 kan hver bokstav ta 1, 2, 3 eller 4 byte. Det finnes mange fler måter å lagre unicode på. Men uansett skal ikke binærdata lagres i en streng. Hvis dataene inneholder 0 blir de kuttet av.
GeirGrusom Skrevet 1. juni 2008 Skrevet 1. juni 2008 Etter det jeg vet, så er ikke CString null-terminated, så det spiller forsåvidt ingen rolle. Men likefullt: ikke bruk CString til å hente data i, bruk et byte-array istedet. CString er ikke ment for binær databehandling, og er derfor ikke egnet til det.
Dj_Offset Skrevet 2. juni 2008 Skrevet 2. juni 2008 jeg har gjort på denne måten men filen som jeg skriver til forblir på 0kb FILE *file = fopen("c:\\test.pdf", "wb"); fprintf(file, pdfBinary); pdfBinary er en CString og den inneholder masse data under debugging. Noe jeg gjør gærnt her? Ja, definitivt! Dette er et sikkerhetshull som går under navnet "Format string vulnerability". Signatur: fprintf(FILE*, format, ...) Litt avhengig av hva du legger i pdfBinary så kan en gjøre mange morsomme minneoverskrivinger og bedre blir det om dataene i pdfBinary kan manipuleres av angriper. Bruk: fwrite(pdfBinary, [lengden på pdfBinary i bytes], 1, file);
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å