2016-06-14 7 views
0

byte [] demande = neues Byte [2]; Nehmen wir an, dass demande ein Datenrahmen ist, der an einen Socket gesendet wird. Was sollte Byte [0] und Byte [1] sein, wenn ich 200 senden möchte. Ich versuche, Byte [0] = 1 und Byte [1] = - 56 (1 * 256 - 56) = 200 schreiben, aber es nicht ' t arbeiten. Wie kann ich?Tdata-Frame an Socket senden

Antwort

1

Ich nehme an, dass die Zahl 200 ein Dezimalwert ist. Da 200 kleiner als 255 ist, passt es in ein Byte, da der hexadezimale Wert von 200 0xC8 ist.

Also in Ihrem Fall haben Sie zwei Möglichkeiten. Welche davon korrekt ist, hängt vom verwendeten Protokoll ab.

Entweder

byte[] demande = { 0x00, 0xC8 }; // little endian 

oder

byte[] demande = { 0xC8, 0x00 }; // big endian 

Oder wenn Sie bevorzugen

byte[] demande = new byte[2]; 
demande[0] = 0x00; 
demande[1] = 0xC8; 

(Little Endian)

+0

0xC8 nicht akzeptiert wird, wird max 0x80 akzeptiert, weil ich sein ein Byte -128 bis 128 – pape

+0

@pape unterzeichnet denken, ohne das Protokoll für das Gerät lesen Sie mit ihm zu kommunizieren ist schwierig, besseren Rat zu geben. Sie könnten versuchen, drei Bytes wie Byte [] demande = {'2', '0', '0'} zu senden; wenn es ein ASCII-Protokoll ist. –

+0

Nein, es ist kein ASCII-Protokoll es ist UTF-8 – pape

1

Sie die ByteBuffer-Klasse verwenden, kann eine erstellen Byte-Array. Wenn Sie wollte die ganze Zahl 200 zu einem Byte-Array konvertieren:

ByteBuffer b = ByteBuffer.allocate(2); 
b.putInt(0x000000c8); 

byte[] result = b.array();