Отправка байтового потока из Java-программы на устройство под управлением C - PullRequest
0 голосов
/ 05 февраля 2019

Я работаю с устройством, которое поддерживает порядок байтов с прямым порядком байтов.Как мне сделать это в Java?

Я создал поток байтов из шестнадцатеричных данных и записал его в поток вывода сокета.Я должен отправлять данные в следующем формате.

Версия протокола: 0x0001

Код_оценки: 0x0011

Размер_запроса: 0x00000008

String s = "0001001100000008";
byte[] bytes = hexStringToByteArray(s);
socket.getOutputStream().write(bytes);

public static byte[] hexStringToByteArray(String s) {
    int len = s.length();
    byte[] data = new byte[len / 2];
    for (int i = 0; i < len; i += 2) {
        data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
            + Character.digit(s.charAt(i+1), 16));
    }
    return data;
} 

Однако я не получаю никакого ответа от устройства на этот запрос.Я что-то не так делаю?

1 Ответ

0 голосов
/ 06 февраля 2019

Вот пример использования ByteBuffer.Код не проверен, поэтому убедитесь, что он работает для вас.

ByteBuffer bb = new ByteBuffer.allocate( 1024 );

short version = 0x0001;
short request = 0x0011;
int size = 0x08;

bb.order( ByteOrder.LITTLE_ENDIAN );
bb.put( version );
bb.put( request );
bb.put( size );

socket.getChannel().write( bb );
...