Отправка сообщения sysex в Java

Я пытаюсь создать приложение, которое отправит sysex-сообщение на устройство Roland. Я нашел пример и попытался немного изменить его для своих нужд:

protected void transmitSYSEX(String byteString)
{
    SysexMessage sysx = new SysexMessage();
    int lengthInBytes = byteString.length() / 2;
    byte sysxMsg[] = new byte[lengthInBytes];

    String message = "";

    for (int i = 0; i < lengthInBytes; i++) 
    {
        sysxMsg[i] = (byte) Integer.parseInt(
        byteString.substring(i * 2, i * 2 + 1), 16);
    }

    for (int i = 0 ; i < sysxMsg.length ; i++)
        message += sysxMsg[i];

    textView.setText(message);

    try
    {
        sysx.setMessage(sysxMsg, sysxMsg.length);
    } 
    catch (InvalidMidiDataException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    out_queue.add(sysx);
}

ByteString представляет собой строку, содержащую следующее шестнадцатеричное сообщение: F0411000004F1200020201070272F7 Однако моя контрольная распечатка в строке textView.setText(message) возвращает следующую строку: 15410041000000715

Не совсем уверен, где он идет не так, не должно ли сообщение textView быть таким же, как входное сообщение?

С уважением /M

1 ответ

Решение

Я решил проблему с помощью этого алгоритма:

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));

В этом обсуждении: Преобразовать строковое представление шестнадцатеричного дампа в байтовый массив, используя Java?

Не уверен на 100%, почему мой возвращаемый массив перемешан, я думаю, подстрока не совсем подходит для работы по какой-то причине.

Ура / м

Другие вопросы по тегам