Datentypen unsigned byte?

TrustSeg

Mitglied
Hallo,

ich bin eigentlich ein C/C++ Programmierer, muss aber mein erstes Projekt in Java für das Android Tab schreiben. :autsch: Wie definiere ich einen Datentyp mit einer Länge von einem Byte und Wertebereich 0 bis 255?

In C/C++ ist es: unsigned char

Aber in Java läuft der Wertebereich von -128 bis +127.
 
???:L
Das ist jetzt ein Witz?!

Java hat keinen Datentyp wie den stink normalen (in jeder Sprache vorhandenen) Byte? Wie gleiche ich dann z. B. nen Array byteweise mit dem erw. ASCII Zeichensatz ab oder lese nur einen Byte aus einer Datei? Ich möchte auch nicht unbedingt doppelten Speicher nutzen als nötig.

Bin irgendwie etwas konfus.
 
Es ist in Java egal ob du byte, short oder int nutzt. Innerhalb der VM wird aus Geschwindigkeitsgründen immer mit int gearbeitet. Du brauchst also keinen zusätzlichen Speicher.

Für Chars gibt es extra einen char Datentyp da Java intern mit UTF-8 arbeitet.

Auch InputStreams und Reader geben dir einen int statt eines byte zurück, aus oben genannten Gründen.
 
Wenn ich beispielsweise die ersten drei magic bytes einer Datei prüfen möchte, müsste ich im folgenden Code ein Integer-Array nutzen und mit 0x000000EF usw. abgleichen?
Java:
byte[] bFileHeader = new byte[3];
BufferedInputStream f = new BufferedInputStream(new FileInputStream(sFilename));
f.read(bFileHeader);
	
if (bFileHeader[0] == 0xEF && bFileHeader[1] == 0xBB && bFileHeader[2] == 0xBF) {
	// hmm?
}
[...]
(der Quelltext ist absichtlich abgekürzt)
 
Nee so geht es, dann musst du aber 0xEF (usw) explizit nach byte casten, damit Java im Hintergrund den richtigen Bytewert dafür ermittelt (meine ich zu mindestens).

Versuche also mal:
Java:
byte[] bFileHeader = new byte[3];
BufferedInputStream f = new BufferedInputStream(new FileInputStream(sFilename));
f.read(bFileHeader);
    
if (bFileHeader[0] == (byte) 0xEF && bFileHeader[1] == (byte) 0xBB && bFileHeader[2] == (byte) 0xBF) {
    // hmm?
}
[...]
 
Ok, das muss ich mir später zu Hause nochmal genauer anschauen. Nach 9 Stunden Arbeit kann ich sowieso nicht mehr klar denken. Auf jedenfall danke für die schnelle und nette Hilfe! 🙂
 

Zurück
Oben