3

私は文字列を持っています:

String str = "KITTEN";

そして、それから byte[] を作成したいのですが、ただ:

byte[] mybyte = new byte[] { 'K', 'I', 'T', 'T', 'E', 'N'}

文字列をそのバイト[]に変更する方法を知っている人はいますか? 私が見つけたものはすべて、実際の変換に関するものです。文字列を 16 進数で表現したくないことに注意してください。

PS。質問のタイトルが間違っている可能性があります - 申し訳ありませんが、書き方がわかりませんでした。

編集:

byte[] myBytes = str.getBytes();

表示中:

byte[] display = new byte[] { 0x00, 0, 0, 'K', 'I', 'T'}; 

動作し、表示:

byte[] display = new byte[] {  0x00, 0, 0, myBytes[0], myBytes[1], myBytes[2] }; 

動作しません。AndroidフォンにNFCで接続した端末の画面に表示させてみました。何が問題なのか知っていますか?

4

4 に答える 4

7

変換中です。変換する必要あります- aは a と同じではありません。charbyte

に渡すエンコーディングとして「ISO-8859-1」を使用できます。String.getBytes()これにより、文字ごとに1バイトが得られ、U + 0000からU + 00FF(おそらく「穴」の文字を含む)に対してのみ有効になります。 'ISO-8859-1 には実際にはありませんが、ねえ...)'?' の ASCII 表現を取得します。ただし、その範囲にない文字の場合。

これをやりたいということは、おそらく、以前に間違っていたことを示しています。特に、base64 などを使用せずに文字列に変換した任意のバイナリ データを取得しようとしている場合は、既にデータを失っている可能性があります。

于 2012-09-28T12:13:06.157 に答える
1

getBytes()は私のために働きます:

String str = "KITTEN";
byte[] bytes = str.getBytes();
for(byte b : bytes) {
    System.out.print("'" + (char) b + "' ");
}

'K' 'I' 'T' 'T' 'E' 'N' 

getBytes()も変換を行っているため、@Jonが書き込んだ他のすべては引き続き有効です。

プラットフォームのデフォルトの文字セットを使用して、この文字列を一連のバイトにエンコードし、結果を新しいバイト配列に格納します。

getBytes()を使用するとプラットフォームの依存関係が発生するため、適切な文字セットを明示的に渡すことをお勧めします。

byte[] bytes = str.getBytes(StandardCharsets.ISO_8859_1);
于 2012-09-28T12:18:12.613 に答える
1

byteはキーワードであるため、変数名として使用することはできません。

byte[] byte = new byte[] { 'K', 'I', 'T', 'T', 'E', 'N'};

あなたが使用することができます:

byte[] myBytes = new byte[] { 'K', 'I', 'T', 'T', 'E', 'N'};

とにかく、String strあなたから直接変換を行うには、次のことができます。

byte[] myBytes = str.getBytes();
于 2012-09-28T12:18:43.403 に答える
0

The projection: char to byte is invalid due to the information loss. A char is an Unicode character which has encoding information. An byte is a number. Without the encoding, the number of the byte has no meaning.

于 2012-09-28T12:54:58.123 に答える