0

我正在尝试制作一个将 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消息不应该和输入消息一样吗?

问候/米

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 将十六进制转储的字符串表示形式转换为字节数组?

不是 100% 确定为什么我返回的数组都是混乱的,我猜由于某种原因子字符串不能完全胜任这项工作。

干杯/M

于 2012-10-09T16:47:20.957 回答