Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zum guten alten BYTE - Datentyp....
Ich habe da eine Funktion namens outportb(UINT adresse, BYTE value).
Jetzt muss ich aber einzenlne Bits ansprechen in dem Byte, in dem Beispielcode den wir bekommen haben, übergibt der Wahnsinnige gleich hex-zahlen, damit komme ich aber nicht zurecht.
O.K., so ein BYTE muss 8 Bit haben, und ich muss doch die BITs seber irgendwie ansteuern können??
Und was ist eigentlich dieses BYTE, es gehört nicht zur Ansi-Definition?
Mfg
Original geschrieben von ceisserer
O.K., so ein BYTE muss 8 Bit haben, und ich muss doch die BITs seber irgendwie ansteuern können??
klar, mit logischen bitoperationen:
testen mit AND:
wert AND 00001000 > 0 => bit 3 ist gesetzt
setzen mit OR:
wert OR 0001000 => bit 3 wird gesetzt
umschalten mit XOR:
wert XOR 00001000 => bit 3 wird umgeschalten (0=>1, 1=>0)
-j
peschmae
01-06-2003, 12:02
das sind die lustigen Spielereien, die man damals gemacht hat, als man noch nicht genug Speicher hatte, um für einen boolean-Wert gleich ein ganzes byte zu verschwenden :D
Da muss ich zugegebenermassen jeweils auch recht viel denken...
MfG Peschmä
Danke vielmals Jasper!
Leider klappt das z.B. nicht so gut:
BYTE bt;
bt OR 00010000;
printf("Hallo: %d\n", bt);
Da spuckt mir der Visual-Compilier einen Synthaxfehler aus, mit einem "|" frisst er es zwar, aber es ändert den wert leider nicht.
Abfragen muss ich den Wert sowieso nicht, nur setzten, eigentlich müsste das ja funktionieren:
BYTE bt ;
bt = 11110000;
printf("Hallo: %d\n", bt);
das funktioniert bei mir, ist das so O.K.?
Was ich nicht verstehe, ist, warum der Compilier da sich noch aufregt:
"D:\serialchat\serialchat.c(25) : warning C4305: '=' : Verkuerzung von 'const __int64 ' in 'unsigned char `"
Mfg
BLUESCREEN3D
01-06-2003, 13:36
Original geschrieben von ceisserer
Leider klappt das z.B. nicht so gut:
BYTE bt;
bt OR 00010000;
printf("Hallo: %d\n", bt);
Da spuckt mir der Visual-Compilier einen Synthaxfehler aus, mit einem "|" frisst er es zwar, aber es ändert den wert leider nicht.
probier es mal mit "bt |= 16;"
du kannst nicht einfach dezimalzahlen oder oktalzahlen (deine Zahl 00010000 wird vom Compiler als oktale Zahl interpretiert, da sie mit einer 0 beginnt) wie binaere Zahlen benutzen! "00010000" geht also sowieso nicht
Original geschrieben von ceisserer
Abfragen muss ich den Wert sowieso nicht, nur setzten, eigentlich müsste das ja funktionieren:
BYTE bt ;
bt = 11110000;
printf("Hallo: %d\n", bt);
das funktioniert bei mir, ist das so O.K.?
Was ich nicht verstehe, ist, warum der Compilier da sich noch aufregt:
"D:\serialchat\serialchat.c(25) : warning C4305: '=' : Verkuerzung von 'const __int64 ' in 'unsigned char `"
wieder das gleiche - woher soll denn der Compiler wissen, dass das jetzt eine binäre Zahl und keine dezimale Zahl ist?
bt kann mit 8 Bit Werte von 0 bis 255 aufnehmen - dein Wert 11110000 liegt also etwas zu hoch und würde 3 Byte also 24 Bit Speicher benötigen - da du den Wert aber einer Variable vom Typ Byte zuordnest muss es auf 8 Bit gekürzt werden...
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.