Charをバイトまたはバイト配列に変換する必要があります。他の言語では、charは1バイトに過ぎないことを知っています。ただし、Java文字クラスを見ると、最小値は\ u0000で、最大値は\ uFFFFです。これにより、charは2バイト長のように見えます。
1バイトとして保存できますか、それとも2バイトとして保存する必要がありますか?
誰かが尋ねる前に、自分の結果がバイト配列であることを期待するインターフェイスの下で作業しているので、これを実行しようとしていると言います。ですから、charを1に変換する必要があります。
私に知らせて、これを理解するのを手伝ってください。
ありがとう、jbu
文字をバイトに変換するには、 文字エンコーディング を指定する必要があります。文字エンコーディングによっては、文字ごとに1バイトを使用するものと、2バイト以上を使用するものがあります。実際、多くの言語では、1バイトでエンコードするには文字が多すぎます。
Javaでは、文字からバイトに変換する最も簡単な方法は、String
クラスの getBytes(Charset)
メソッドを使用することです。 ( StandardCharsets
クラスはいくつかの一般的なエンコーディングを定義します。)ただし、このメソッドは、指定されたエンコーディングで文字をマッピングできない場合、文字をサイレントに�で置き換えます。さらに制御が必要な場合は、 CharsetEncoder
を構成して、このケースをエラーで処理するか、別の置換文字を使用できます。
Charは確かにJavaの16ビットです(そして、唯一の符号なしタイプでもあります!!))。
文字のエンコードがASCIIであることが確実な場合は、バイトにキャストすることができます(ASCIIはcharの下位7ビットのみを使用するため)。
文字を変更する必要がない場合、または文字列内の文字の意味を理解する必要がない場合は、次のように2バイトで文字を格納できます。
char[] c = ...;
byte[] b = new byte[c.length*2];
for(int i=0; i<c.length; i++) {
b[2*i] = (byte) (c[i]&0xFF00)>>8;
b[2*i+1] = (byte) (c[i]&0x00FF);
}
(速度が重要な場合は、2 *を右シフトに置き換えることをお勧めします)。
ただし、一部の実際の(表示された)文字(より正確には、Unicodeコードポイント)は、2つの連続した文字で書かれていることに注意してください。したがって、2つの文字の間で切り取っても、実際の文字の間で切り取られているとは限りません。
文字配列対応の方法でchar配列をデコードまたはエンコードする必要がある場合は、Java.ioツールを使用してchar配列または文字列をデコードおよびエンコードして、適切な文字操作を確保する必要があります。
他の人が言っていることを拡張するには、バイト配列として必要な文字がある場合は、最初にその文字を含む文字列を作成し、次に文字列からバイト配列を取得します。
private byte[] charToBytes(final char x) {
String temp = new String(new char[] {x});
try {
return temp.getBytes("ISO-8859-1");
} catch (UnsupportedEncodingException e) {
// Log a complaint
return null;
}
}
もちろん、適切な文字セットを使用してください。これは、一度に1つのcharを取り、文字列に変換してからバイト配列に変換するのではなく、文字列の操作を開始するよりもはるかに効率的です。
char in Javaは符号なし16ビット値です。お持ちのものが7ビットに収まる場合は、バイトにキャストしてください(たとえばASCIIフィット)。
Java.nio.charset APIもチェックアウトできます。