2011-08-05 107 views
4

我有一个字符串,我有与字节数组来连接,所以我尝试这个字符串和字节数组级联

String msg = "msg to show"; 

byte[] msgByte = new byte[msg.length()]; 

try { 
msgByte = msg.getBytes("UTF-8"); 
} catch (UnsupportedEncodingException e) { 
e.printStackTrace(); 
} 

byte[] command = {2,5,1,5} 

byte[] c = new byte[msgByte.length + command.length]; 
System.arraycopy(command, 0, c, 0, command.length); 
System.arraycopy(msjByte, 0, c, command.length, msjByte.length); 

for(Byte bt:c) 
    System.out.println(bt+""); 

这是输出:
2 5 1 5 109 115 103 32 ... ...

但是我正在寻找的结果是这样的
2 5 1 5味精...

我需要在一个阵列中的原因,而是作为一个蓝牙打印机的命令。

有没有办法,有什么建议?

在此先感谢! :)

+0

你有正确的结果。 ascii(109)= m。这是一个相当低级别的界面,混合命令代码和字符串? –

+0

我的错误,我以为我错过了数组中的ASCII码,因为打印机的示例命令来这样的事情:byte [] ESC_Z2 = {0x1b,0x5a,0x00,0x51,0x05,0x14,0x00, '信息' };所以我试着发送纯粹的ASCII代码,但它不起作用,但它是由于命令 –

回答

3

您不能有一个包含'2 5 1 5 m s g'的字节数组。来自documentation

字节数据类型是一个8位有符号二进制补码整数。它有 最小值-128和最大值127(含)。

我不能设想一个场景,你实际上想用字符串连接未编码的字节,但是这里有一个解决方案返回char[]

public static void main(String[] args) { 
    final String msg = "msg to show"; 
    final byte[] command = { 2, 5, 1, 5 }; 

    // Prints [2, 5, 1, 5, m, s, g, , t, o, , s, h, o, w] 
    System.out.println(Arrays.toString(concat(msg, command))); 
} 

private static char[] concat(final byte[] bytes, final String str) { 
    final StringBuilder sb = new StringBuilder(); 
    for (byte b : bytes) { 
     sb.append(b); 
    } 
    sb.append(str); 
    return sb.toString().toCharArray(); 
} 
1

另一种方法是做到这一点...

String msg = "msg to show"; 
char[] letters = msg.toCharArray(); 
byte[] command = {2,5,1,5}; 
String result; 
for (String str: command) { 
    result += str + " "; 
} 
for (String str: letters) { 
    result += str + " "; 
} 
System.out.println(result); 
+1

上的参数,你可以有字节的字节,你只需要知道你在做什么。只要你对编码清楚,将字符<127作为字节呈现就没有问题。 –

+0

谢谢你接受!我会改变我的答案。 – fireshadow52

+0

@Jochen:我不同意。该选举委员会明确指出,他正在寻找的结果是'2 5 1 5 m s g'。一个字节数组只能包含整数。我知道你的意思,但是OP对这些角色的“编码”并不满意,因为他已经试过了(2 5 1 5 109 115 103 32)。 – hoipolloi