Avatar billede neuro Nybegynder
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 ...
Avatar billede mickni33 Nybegynder
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
Avatar billede fri-hash Nybegynder
24. oktober 2001 - 13:21 #2
afhængigt af om man bruger signed magnitude eller unsigned magnitude
Avatar billede neuro Nybegynder
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?
Avatar billede mickni33 Nybegynder
24. oktober 2001 - 13:23 #4
ligesom hvis du skriver binært
11111111 = -1

Det er noget der hedder two\'s complement
Avatar billede mickni33 Nybegynder
24. oktober 2001 - 13:24 #5
prøv med eff og se hvad den siger
Avatar billede neuro Nybegynder
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
Avatar billede disky Nybegynder
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
Avatar billede wisen Nybegynder
24. oktober 2001 - 13:28 #8
Prøv at bruge \"unsigned int\" istedet for \"int\"....
Avatar billede martinskou Nybegynder
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

*/
Avatar billede mickni33 Nybegynder
24. oktober 2001 - 13:29 #10
disky>>
hvis du siger ff = -1 så er det vel ikke helt vrøvl :)
Avatar billede wisen Nybegynder
24. oktober 2001 - 13:29 #11
....  \"int\" er et 32-bit SIGNED heltal på 32-bit platforme...
Avatar billede martinskou Nybegynder
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

*/
Avatar billede neuro Nybegynder
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 :)
Avatar billede disky Nybegynder
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.
Avatar billede neuro Nybegynder
24. oktober 2001 - 13:37 #15
jeg kan jo ikke dele pointene .. =/
Avatar billede neuro Nybegynder
24. oktober 2001 - 13:37 #16
det er jo heller ik point det handler om =)
Avatar billede disky Nybegynder
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å ???

Avatar billede neuro Nybegynder
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??
Avatar billede mickni33 Nybegynder
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
Avatar billede disky Nybegynder
24. oktober 2001 - 13:42 #20
mickni:

Så synes jeg du skal foreslå at point bliver fjernet.


Neuro: det er okay,
Avatar billede mickni33 Nybegynder
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
Avatar billede disky Nybegynder
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å\'
Avatar billede mickni33 Nybegynder
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
Avatar billede disky Nybegynder
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.
Avatar billede neuro Nybegynder
24. oktober 2001 - 13:46 #25
Avatar billede neuro Nybegynder
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 =)
Avatar billede mickni33 Nybegynder
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
Avatar billede neuro Nybegynder
24. oktober 2001 - 13:52 #28
ok .. det ved jeg til en anden gang .. :) var ikke klar over det ... :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester