Bit Rotation

ronaldh

Erfahrenes Mitglied
Hallo,

ich benötige in VB6 eine Funktion zur Bit Rotation. Dazu habe ich mir eine C++ DLL geschrieben, bin in C++ aber leider noch nicht so fit.

Leider kommen nicht die erwarteten Ergebnisse zurück. Meine Funktionen sehen derzeit so aus:

Code:
unsigned long _stdcall LRotateLeft (unsigned long ul, int Anzahl)
{ 
	unsigned long TWert;
	TWert = _lrotl( ul, Anzahl );
	return (TWert);
}

unsigned long _stdcall LRotateRight (unsigned long ul, int Anzahl)
{ 
	unsigned long TWert;
	TWert = _lrotr( ul, Anzahl );
	return (TWert);
}

Laut der mir vorliegenden Vorgabe sollte bei einem übergebenen Wert von Hex2C3C und einer Left-Rotation von 4 bits HexC3C2 rauskommen, und bei einem Wert von HexFA07 und einer Right-Rotation von 7 Bits sollte Hex 0FF4 rauskommen.

Meine Ergebnisse sind leider 2C3C0 bzw. FFFFFF4.

Woran kann das liegen?
 
Hi.

Ein unsigned long ist in der Regel 4 Byte groß. D.h. 0x2C3C == 0x00002C3C und eine Links-Rotation um 4 Bits ergibt dann 0x0002C3C0.

Warum schreibst du denn dafür eine DLL, man müßte doch direkt die Funktionen der MSVCRT nutzen können, oder?

Gruß
 
Hallo deepthroat,

die DLL brauche ich sowieso, da ich noch ein paar andere Prüfsummenberechnungen benötige. Da dachte ich halt, dass dies sich in C++ am besten abbilden lässt.

Ich müsste also wohl einen anderen Datentyp wählen, oder? Ich habe es auch mit einem unsigned int versucht, aber da kam nichts gescheites raus. Die ursprünglichen Werte sollen 16 Bit lang sein. Im VB wäre das wohl ein Integer.

Viele Grüße
ronaldh
 

Neue Beiträge

Zurück