24. oktober 2001 - 13:17
Der er
27 kommentarer og 1 løsning
ff giver -1, og ikke 255
jeg er igang med at kode en lille consol app. som kan læse en raw fil og finde en pixel i den. det virker fint bortset fra at hvis en karakter i filen er ff bliver det udskrevet som -1, hvis man udskriver det som int. koden er: class rawfile { public: char *buffer; rawfile(char *fname, char *fmode) { buffer=NULL; FILE *fp; fp=fopen(fname,fmode); printf(\"\\nFILE: %s\\n\",fname); if (fp!=NULL) { int fsize; printf(\"* File opened.\\n\"); fseek(fp,0,SEEK_END); fsize=ftell(fp); fseek(fp,0,SEEK_SET); buffer=(char*)malloc(fsize+1); printf(\"* Memory allocated for file buffer (%d bytes).\\n\",fsize); fread(buffer,sizeof(char),fsize,fp); fclose(fp); printf(\"* File copied to buffer and closed.\\n\"); //buffer[fsize]=NULL; //printf(\"\\n%s\\n\\n\",buffer); } else { printf(\"Error opening file!\\n\"); } } ~rawfile() { if (buffer!=NULL) { free(buffer); printf(\"* Buffer closed and memory freed.\\n\"); } } void raw_getpx(int x,int y) { int pxpos; char px; pxpos=(y*50)+x; printf(\"\\n - Pixel found at position: %d\",pxpos); px=buffer[pxpos]; printf(\"\\n\\n%02x\\n\\n\",buffer[pxpos]); //printf(\"\\n - Pixel found (x): %02x\\n\",px); //printf(\" - Pixel found (c): %c\\n\",px); //printf(\" - Pixel found (d): %d\\n\",px); //printf(\"\\n\"); } }; void main(int argc, char* argv[]) { if (argc>1) { rawfile rwf(argv[1],\"rb\"); rwf.raw_getpx(3,5); } }; håber nogen har nogle gode forslag til hvad der lige går galt ...
Annonceindlæg tema
24. oktober 2001 - 13:19
#1
ff i hex er også et negativt tal hvis det første bogstav er f viser det at det er negativt
24. oktober 2001 - 13:21
#2
afhængigt af om man bruger signed magnitude eller unsigned magnitude
24. oktober 2001 - 13:22
#3
ff er jo normalt 255 .. og det er egentlig det jeg håber på at kunne få lavet det -1 om til. nogen forslag?
24. oktober 2001 - 13:23
#4
ligesom hvis du skriver binært 11111111 = -1 Det er noget der hedder two\'s complement
24. oktober 2001 - 13:24
#5
prøv med eff og se hvad den siger
24. oktober 2001 - 13:25
#6
men det er en fil der bliver læst ind, så jeg kan jo ikke sidde og ændre alle ff til eff .. :) den skulle jo helst bare gerne forstå det :) det skal så siges at det er en RAW fil som den indlæser og ikke en alm. tekst fil
24. oktober 2001 - 13:26
#7
mickni det er noget vrøvl . ff betyder enten -1 hvis det er signed eller 255 hvis det er unsigned. I det tilfælde af hvor det er signed betyder den først bit 0 = positiv 1=negativ. Pga 2\'s komplement. neuro: typecast den til en int og lav en &oxff på den, så fjerner du alt ud over 8 bit og så er den 255
24. oktober 2001 - 13:28
#8
Prøv at bruge \"unsigned int\" istedet for \"int\"....
24. oktober 2001 - 13:28
#9
int main(int argc, char* argv[]) { char c=255; printf(\"c=%x \\n\",c); printf(\"c=%d \\n\",c); printf(\"c=%u \\n\",(unsigned char)c); return 0; } /* resultat: c=ffffffff c=-1 c=255 */
24. oktober 2001 - 13:29
#10
disky>> hvis du siger ff = -1 så er det vel ikke helt vrøvl :)
24. oktober 2001 - 13:29
#11
.... \"int\" er et 32-bit SIGNED heltal på 32-bit platforme...
24. oktober 2001 - 13:30
#12
int main(int argc, char* argv[]) { char c=255; unsigned char d=255; printf(\"c=%x \\n\",c); printf(\"c=%d \\n\",c); printf(\"c=%u \\n\",(unsigned char)c); printf(\"d=%u \\n\",d); return 0; } /* resultat: c=ffffffff c=-1 c=255 d=255 */
24. oktober 2001 - 13:31
#13
ff skal ikke være -1 , det er bare det jeg for returneret, men jeg vil gerne have 255 :) takker martinskou og disky for de gode svar :)
24. oktober 2001 - 13:33
#14
mickni jo det er noget vrøvl for det er ikke f\'ets skyld det er negativt. Der er typen af variable der er årsagen. neuro: jamen tak for ikke at få point.
24. oktober 2001 - 13:37
#15
jeg kan jo ikke dele pointene .. =/
24. oktober 2001 - 13:37
#16
det er jo heller ik point det handler om =)
24. oktober 2001 - 13:38
#17
neuro: jo du kan splitte point op på flere svar. Og hvis det ikke handlede om point hvorfor er de her så ???
24. oktober 2001 - 13:41
#18
det var jeg ikke klar over at man kunne .. så jeg opretter lige et spørgsmål, så kan du svare på det og få dine point =) ok??
24. oktober 2001 - 13:41
#19
det det faktisk drejer sig om det er jo bare at hjælpe hinanden og lære fra hinanden. at man så får lidt point det kommer vel i anden række
24. oktober 2001 - 13:42
#20
mickni: Så synes jeg du skal foreslå at point bliver fjernet. Neuro: det er okay,
24. oktober 2001 - 13:42
#21
desuden var det kun 7½ point til hver, det var vel noget andet hvis det var 100 eller 200
24. oktober 2001 - 13:43
#22
micni: hvis jeg ikke fik de små mængder point havde jeg ikke opnået plads #24. Husk ordsproget med \'mange bække små\'
24. oktober 2001 - 13:44
#23
det ville være ærgeligt for så ville folk som dig ikke svare og så ville vi miste en masse gode svar
24. oktober 2001 - 13:45
#24
lige netop, og det gør jeg hvis folk ikke fordeler point på en ok måde. Og jeg mener jeg også har fortjent lidt siden jeg blev takket, havde han ikke gjort det var det okay. Men at sige tak og ikke give noget er lidt at underminere systemmet.
24. oktober 2001 - 13:46
#25
24. oktober 2001 - 13:49
#26
hehe =) ja men nu er der rodet bod på det .. og håber da også på disky\'s opbakning hvis jeg skulle støde på flere problemer =)
24. oktober 2001 - 13:50
#27
Når du skal give point skal du bare trykke avanceret istedet for accepter så kan du dele pointene sådan
24. oktober 2001 - 13:52
#28
ok .. det ved jeg til en anden gang .. :) var ikke klar over det ... :)
Kurser inden for grundlæggende programmering