evgeny Skrevet 27. mai 2008 Del 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 Lenke til kommentar
GeirGrusom Skrevet 27. mai 2008 Del 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 Lenke til kommentar
evgeny Skrevet 27. mai 2008 Forfatter Del Skrevet 27. mai 2008 ok char array. men har du noen eksempler hvornda man lagrer dataen til harddisk? Lenke til kommentar
Mr.Garibaldi Skrevet 27. mai 2008 Del 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 Lenke til kommentar
teflonpanne Skrevet 27. mai 2008 Del Skrevet 27. mai 2008 Men husk å åpne den med "wb", b står for binary mode Lenke til kommentar
evgeny Skrevet 27. mai 2008 Forfatter Del 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 Lenke til kommentar
evgeny Skrevet 27. mai 2008 Forfatter Del 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 Lenke til kommentar
Mr.Garibaldi Skrevet 27. mai 2008 Del 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 Lenke til kommentar
Emancipate Skrevet 1. juni 2008 Del 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. Lenke til kommentar
GeirGrusom Skrevet 1. juni 2008 Del 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. Lenke til kommentar
Dj_Offset Skrevet 2. juni 2008 Del 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); Lenke til kommentar
evgeny Skrevet 4. juni 2008 Forfatter Del Skrevet 4. juni 2008 Takk. problemet løst 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å