int bitweise operieren

MasterEvil

Erfahrenes Mitglied
So .. da bin ich schon beim nächsten Problem :p

also ich muss folgenden C# Code nach Java portieren:

UInt32 sync = 0;
byte buffer; (wird woanders gefüllt);

sync = sync>>8 | (UInt32)buffer<<24;
if ((sync & 0x00ffffff) == 0x00010000)
int syncId = (int)((sync>>24) & 0xff);


Das Problem, Java hat kein unsigned int also muss ich mir hier etwas anderes überlegen.
Verschlimmernd hinzu kommt das ich noch nicht ganz checke was hier passiert.

Ich versuch mal so weit wie ich es verstehe, also sync ist 32 Bits groß, buffer ist 8 Bits groß.

(UInt32)buffer<<24 ...... was macht diese Zeile?
Es entsteht ein neues Object mit 32 Bit, die <<24 verschiebt die Bits um 24 nach vorne?
Bedeutet das, dass das ehemalige Byte jetzt einfach nur vorne steht?
Was bewirkt der Oder Operator? Die Bits werden ODER verknüpft, was heißt das?

Dann das: sync & 0x00ffffff ..... da wird doch bestimmt nur die Hexzahl mit den vorhandenen Bits addiert und anschließend mit einer anderen Hexzahl verglichen. sync hat doch aber 32 Bit und die Hexzahl steht doch nur für 8 Bit oder? Was wird denn da genau addiert und verglichen oO

Währe super wenn mir auch hier wieder jemand helfen kann, wegen dem 32 Bit unsigned Int, gibt es da schon fertige Klassen die soetwas imulieren?
 
Juhu bin ich stolz auf mich :-)

Zum größten Teil bin ich jetzt doch noch dahinter gestiegen und ich habs sogar geschafft ganz alleine eine UInt32 Klasse zu schreiben *g* .. wieso findet man sowas simples nicht bei Google ...


Code:
public class UInt32 {
	private int uInt;

	public UInt32() { uInt = 0; }
	public UInt32(int Value) { uInt = Value; }
	public UInt32(long Value) { uInt = (int)Value << 32; }

	public int getUInt32() { return uInt; }
	public void setUInt32(int unsignedInt) {
		uInt = unsignedInt;
	}
	public void setUInt32(long signedLong) {
		uInt = (int)signedLong << 32;
	}

	public long toLong() {
		long sLong = uInt;
		return (sLong << 32) >>> 32;
	}
	public String toString() {
		long sLong = uInt;
		return String.valueOf((sLong << 32) >>> 32);
	}
}
 
Zurück