# RTP Packet lesen - Byte Problem 0xFFFFFF80 statt 0x80



## elBoB (13. Dez 2006)

Hallo,

ich lese die einzelnen UDP Pakete eines RTP Streams. Das Ganze funktioniert zwar eigentlich, nur bekomme ich teilweise falsche Werte. 

ffffff80	 21	 ffffffc0	 70	 62	 24

Der Fehler ist jeweils das FFFFFF. Die Zahl dahinter würde stimmen.

Das Ganze passiert in Windows mit Java 1.5.

Ich hatte das gleiche Problem schon einmal. Damals allerdings beim byteweisen Lesen aus einer Datei.
Darum hoffe ich, dass es ein blöder (leicht zu behebender) Fehler meinerseits ist 

vielen dank schon mal!

hier mal ein bisschen code:


```
socket = new DatagramSocket(1234);
packet = new DatagramPacket( data, data.length );
System.out.println("waiting for packet...");
socket.receive(packet);
// Empfänger auslesen
InetAddress address = packet.getAddress();
int         port    = packet.getPort();
int         len     = packet.getLength();
data    = packet.getData();
System.out.println( "Anfrage von " + address +
                             " vom Port " + port +
	                     " Länge " + len + "\n");
		      
byte[] payload = new byte[len];
payload = packet.getData();
for(int i=0;i<14;i++) {
  System.out.print(Integer.toBinaryString(payload[i]) + "\t ");
  }

System.out.println();

for(int i=0;i<14;i++) {
  System.out.print(Integer.toHexString(payload[i]) + "\t ");
  }
```


----------



## EOB (14. Dez 2006)

koenntest du die ffffff nicht einfach loeschen?

gruesse


----------



## Roar (14. Dez 2006)

die werte sind richtig, die 0x80 sind nur zu groß für einen byte deshalb ritscht da sin den negativen bereich.


----------



## elBoB (15. Dez 2006)

danke einmal für die antworten.

einfach wegschneiden will ich eigentlich nicht. es muss ja eine vernünftige lösung geben.


wegen dem negativen wert habe ich auch schon an eine bereichsüberschreitung gedacht. aber:

0x80 ist dezimal 128
ein byte = 8 bit geht doch wohl bis 256

berichtige mich wenn ich da was übersehe


----------



## Wildcard (15. Dez 2006)

http://de.wikipedia.org/wiki/Zweierkomplement


----------



## elBoB (15. Dez 2006)

danke. da wird einiges klar. nur:

viele methoden liefern ein byte[] zurück. was ist jetzt die beste möglichkeit diese irgendwo zu speichern?
ein byte[] funktioniert ja anscheinend nicht so gut und ein unsigned byte[] scheint es nicht zu geben.


----------



## elBoB (20. Dez 2006)

war da jetzt die frage so blöd, dass keiner antwortet oder ist die einzige lösung wirklich so ein komisches umwandeln in int?


----------



## Beni (20. Dez 2006)

Ich verstehe die Frage nicht; wenn du ein byte[] hast, was hindert dich daran es als byte[] im Speicher zu halten?

Wegen dem Umwandeln zum int, eine einfache Bit-Operation sollte da helfen:

```
byte b = ...
int i = ((int)b) & 0xFF; // vielleicht reicht auch b & 0xFF;
```


----------

