Kleines Problem mit Datentypen
-
Hallo zusammen,
ich bin noch Anfänger in C und habe folgendes Problem:int main(void) { char zu='\0'; int i=0xFA; zu=i; printf("%c\n",zu);//Ausgabe: '.' printf("%d\n",zu);//Ausgabe: -6?? return 0; }
Warum ist die Ausgabe -6, wenn dieser Ascii Wert vor der Zeile 5 eh noch 0xFA ist??
Alsoint main(void) { int i=0xFA; printf("%c\n",i);//i = '.' printf("%d\n",i);//i = 250 return 0; }
Ich verstehe nicht ganz warum i im zweiten Code durchaus als Integer geprinted werden kann, und wenn i in einen char zugewiesen ist nicht mehr??
Mein Aufgabe ist aus einer bmp Datei bestimmte Farbpixel zu redutzieren.Ich benutze fscanf() um die einzelnen Zeichen zu extrahieren, hier ein kleines Bsp:
424D460000000000000036000000280000000200000002000000010018000000000010000000130B0000130B000000000000000000000F00FAFFFFFF0000B9263D00F9060000
Das ist eine bmp Datei mit 2x2pixel
mitwhile(!feof(pLoad)) { fscanf(pLoad,"%c",&offsetcharakter); printf("Ox%x ",offsetcharakter); if(j==offset) { printf("\n\n"); while(!feof(pLoad)) { charakterwandler=offsetcharakter; charakterwandler=charakterwandler%16; printf("Ox%x ",charakterwandler); fscanf(pLoad,"%c",&offsetcharakter); } printf("\n\n"); break; } j++; }
suche ich den offset und reduziere die pixel werte,
mitfscanf(pLoad,"%c",&offsetcharakter);
lese ich zeichen ein
mitfscanf(pLoad,"%d",&offsetcharakter);//offsetcharakter it ein int
funktioniert das irgendwie nicht???
hoffe auf hilfe
-
Warum ist die Ausgabe -6
Ob char signed oder unsigned ist, ist der Implementierung freigestellt und bei deiner Implementierung ist es offenbar signed. Wenn du explizit
unsigned char
benutzt, dann sollte das passieren, was du erwartet hast.bzw. wenn du eh Binary Daten benutzt, dann nimm gleich uint8_t aus stdint.h
funktioniert das irgendwie nicht???
Was heißt "funktioniert nicht"? %d bedeutet
int
und er liestsizeof(int)
byte. (vermutlich 4byte)fscanf ist eher für formatierte Eingabe gedacht. Wenn du eh nur byteweise liest, dann nimm lieber man: fgetc oder gleich man: fread.
-
Du willst etwas über Zweierkomplement wissen: http://de.wikipedia.org/wiki/Zweierkomplement
Tipp: Die Binärdarstellung von 0xFA ist 11111010.
-
Danke an alle für eure hilfe!!