[VC++ 6.0] Integer richtig nach BYTE casten ?

vfl_freak

Premium-User
Hallo zusammen,

ich bin hier in meinem Projekt auf eine Altlast gestoßen, die möglicherweise Probleme macht. Es existiert eine kleine Hilfsfunktion, die bitweise (also innerhalb einer Schleife) prüfen soll, ob ein bestimmtes Bit in 2 verschiedenen Bytes gleich ist :
C++:
bool isBitsEquality( BYTE bVal1, BYTE bVal2, BYTE theBit )
{
	if( (bVal1 & (1 << theBit)) == (bVal2 & (1 << theBit)) )
	{
		return true;
	}
	else
	{
		return false;
	}
}

Der Aufruf erfolgt jedoch mit der Schleifenvariablen - sprich einem Integer :
C++:
for( int iMLZaehler = 0 ; iMLZaehler < 8; iMLZaehler++ )
{
    if( isBitsEquality( byte_1, byte_2, iMLZaehler) )
    {
        ....
    }
}

Ich verzweifle gerade bei dem Versuch, den Integer sauber nach BYTE zu casten ...
Die einfache C-Variante (BYTE)iMLZaehler liefert ebenso wenig die gewünschten Ergebnisse wie ein static_cast<BYTE>(iMLZaehler) ....
Mal werden Änderungen richtig erkannt, mal nicht - ohne für mich nachvollziehbare Logik :rolleyes:

Meine Frage:
(a) wie muss ich sauber von Integer auf BYTE casten :confused:
(b) oder alternativ: gibt es eine besser Lösung für den bit-Vergleich, als die oben genannte Methode :confused:

Bin für jede Hilfe/Anregung dankbar ....

Gruß
Klaus
 
Zuletzt bearbeitet von einem Moderator:
Die einfache C-Variante (BYTE)iMLZaehler liefert ebenso wenig die gewünschten Ergebnisse wie ein static_cast<BYTE>(iMLZaehler) ....
BYTE ist als 'unsigned char' definiert. Je nach Wert der Integer Variablen hast du also beim Casten einen Informationsverlust. Was genau geht denn schief? Hast du mal die Funktionsparameter in verschiedenen Situationen geprüft? Sinnvoll für 'theBit' sind ja eigentlich nur die Werte 0 bis 7.

Gruß
MCoder
 
Moin,

erstmal Danke für die Antwort!

BYTE ist als 'unsigned char' definiert. Je nach Wert der Integer Variablen hast du also beim Casten einen Informationsverlust. Sinnvoll für 'theBit' sind ja eigentlich nur die Werte 0 bis 7.
richtig, aber das ist ja durch die erwähnte FOR-Schleife sichergestellt ...


Was genau geht denn schief?
Hast du mal die Funktionsparameter in verschiedenen Situationen geprüft?
Das ist 'ne gute Frage ... ich sag' mal so: zeitweilig undefiniertes Verhalten :rolleyes:
Das Prüfen der Parameter resp. Werte hat leider das Problem, dass das Verhalten während des Debuggens so wie erwartet ist. Selbst beim Protokolieren der Werte läuft dieser Programmteil korrekt.

Ich befürchte inzwischen ein böses Speicherleck bzw. dass ich mir an anderer Stelle Speicher kaputt schreibe :(
Ich werde heute mal einige Tests vornehmen, bei denen ich einige Folgeteile auskommentiere - und hoffe so, das Problem eingrenzen zu können!

Gruß
Klaus
 
Zurück