【问题标题】:String and byte array concatenation字符串和字节数组连接
【发布时间】:2011-08-05 23:51:33
【问题描述】:

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

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 ...

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

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

提前致谢! :)

【问题讨论】:

  • 你得到了正确的结果。 ascii(109) = 米。这是一个相当低级的接口,将命令代码与字符串混合在一起吗?
  • 我的错误,我认为我在数组中缺少 ASCII 代码,因为打印机的示例命令如下所示:byte[] ESC_Z2 = {0x1b, 0x5a, 0x00, 0x51 , 0x05, 0x14, 0x00 ,'m','e','s','s','a','g','e' };所以我尝试发送纯 ASCII 码,它没有工作,但它是由于命令上的参数

标签: java arrays string


【解决方案1】:

您不能有一个包含“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();
}

【讨论】:

    【解决方案2】:

    另一种方法是这样做......

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

    【讨论】:

    • 你可以有字节为单位的字符,你只需要知道你在做什么。只要您清楚编码,将
    • 感谢您的收看!我会改变我的答案。
    • @Jochen:我不同意。 OP 明确指出他正在寻找的结果是'2 5 1 5 m s g'。字节数组只能包含整数。我知道你的意思,但 OP 对“编码”字符并不满意,因为他已经尝试过(2 5 1 5 109 115 103 32)。
    • 如果 2 是他要发送的命令字节的值,那只是解释问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 2011-11-09
    相关资源
    最近更新 更多