0

Roland デバイスに sysex メッセージを送信するアプリケーションを作成しようとしています。私は例を見つけて、自分のニーズに合わせて少し変更しようとしました:

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 は、次の 16 進メッセージを含む文字列です: F0411000004F1200020201070272F7 ただし、行 textView.setText(message) での私のコントロールの出力は、次の文字列を返します: 15410041000000715

どこが間違っているのかよくわかりません.textViewメッセージは入力メッセージと同じであるべきではありませんか?

よろしく /M

4

1 に答える 1

0

このアルゴリズムを使用して問題を解決しました:

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 を使用して 16 進ダンプの文字列表現をバイト配列に変換しますか?

返された配列がすべてごちゃ混ぜになっている理由について 100% 確信があるわけではありません。

乾杯/M

于 2012-10-09T16:47:20.957 に答える