我正在尝试创建一个将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
答案 0 :(得分: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));
在此讨论中提供: Convert a string representation of a hex dump to a byte array using Java?
不是100%肯定为什么我的返回数组都是混乱的,我想由于某种原因,子串不能胜任工作。
干杯 / M