Java 字符串和字节数组串联

Java 字符串和字节数组串联,java,arrays,string,Java,Arrays,String,我有一个字符串,我必须连接到一个字节数组,所以我尝试了这个 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

我有一个字符串,我必须连接到一个字节数组,所以我尝试了这个

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 m s g

我需要它在一个阵列中,因为它被用作蓝牙打印机的命令

有没有办法,有什么建议


提前感谢!:)

不能有包含“2 5 1 5 m s g”的字节数组。从:

字节数据类型是一个8位有符号2的补码整数。它有 最小值为-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();
}

另一种选择是这样做

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);

你可以有字节的字符,你只需要知道你在做什么。只要您清楚编码,将小于127字节的字符显示为字节是没有问题的。谢谢您的关注!我会改变我的答案。@Jochen:我不同意。OP明确指出,他所寻找的结果是“2 5 1 5 m s g”。字节数组只能包含整数。我知道你的意思,但是OP对字符的“编码”不满意,因为他已经尝试过了(2 5 1 5 109 115 103 32)。如果2是他想要发送的命令字节的值,这只是解释问题。你得到了正确的结果。ascii(109)=m。这是一个相当低级的接口,将命令代码与字符串混合在一起吗?我的错误是,我认为数组中缺少ASCII代码,因为打印机的示例命令是这样的:byte[]ESC_Z2={0x1b,0x5a,0x00,0x51,0x05,0x14,0x00,'m','e',s','s','a','g','e'};因此,我尝试发送纯ASCII代码,但它不起作用,但这是由于命令上有一个参数