2011-08-05 28 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 MSGです...

それはBluetoothプリンタ用のコマンドとして使われています原因私は1つのアレイでそれを必要とします。

方法はありますか、ご提案はありますか?

ありがとうございます! :)

+0

あなたは正しい結果を持っています。アスキー(109)= m。コマンドコードと文字列を混在させたかなり低レベルのインターフェースですか? –

+0

私の誤りは、配列のASCIIコードで何かが見つからないと思ったのですが、プリンタのコマンドの例は次のようになります:byte [] ESC_Z2 = {0x1b、0x5a、0x00、0x51、0x05、0x14、0x00、 'm'、 'e'、 's'、 's'、 'a'、 'g'、 'e'};だから私は純粋なASCIIコードを送信しようとしたが、それは動作しませんでしたが、それはコマンドのパラメータのためです –

答えて

3

'2 5 1 5 m s g'を含むバイト配列を持つことはできません。 documentation

バイトデータ型は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(); 
} 
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:私は同意しない。 OPは彼が探している結果が「2 5 1 5 m s g」であることを明確に述べている。バイト配列には整数のみが含まれます。私はあなたが何を意味しているのか知っていますが、OPは彼がすでにそれを試みた(2 5 1 5 109 115 103 32)文字を「エンコードする」ことに満足していませんでした。 – hoipolloi