首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中发送sysex消息

在Java中发送sysex消息
EN

Stack Overflow用户
提问于 2012-10-07 23:24:35
回答 1查看 777关注 0票数 0

我正在尝试制作一个应用程序,它将向Roland设备发送sysex消息。我找到了一个例子,并尝试根据自己的需要对其进行了一些修改:

代码语言:javascript
复制
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);
}

消息是一个包含以下十六进制消息的字符串: F0411000004F1200020201070272F7但是,我在textView.setText( byteString )行的控件打印输出将返回以下字符串: 15410041000000715

不太确定哪里出了问题,textView消息不应该与输入消息相同吗?

关于/M

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-10 00:47:21

我用这个算法解决了这个问题:

代码语言:javascript
复制
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));

在本讨论中提供:Convert a string representation of a hex dump to a byte array using Java?

我不能100%确定为什么我返回的数组都是乱七八糟的,我猜由于某些原因,子字符串不能胜任工作。

干杯/M

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12770100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档