文字列の中にバイト値(8ビット)を追加する必要があるAndroidアプリケーションを開発しようとしています再度バイト[]でそれを読んでください。文字列にバイト値(8ビット)を追加してJavaのバイト単位で読み込む方法
しかし、文字列をbyte []に変換するともう一度getBytes()を使用して別の値が得られます。私はいくつかのエンコーディングまたは文字セットの問題だと思います。
ところで、私はC.
で、私はほとんどのコードコードJavaプログラミングに新しいです:
void function(void)
{
String a = "bla";
char x = (0xD0 & 0xFF); //Need to add & read back '0xD0'
a += x;
Log.d(TAG,"TEST: "+a);
String mm = "-- ";
byte[] buffer = null;
try {
buffer = a.getBytes("US-ASCII");
} catch (UnsupportedEncodingException e) {
Log.e(TAG, e.getMessage());
}
for (int i = 0; i < buffer.length; i++) {
mm+=" "+Integer.toHexString(buffer[i]);
}
Log.e(TAG, "Len:"+buffer.length+mm);
}
出力:期待
TEST: bla
Len:4-- 62 6c 61 3f
:
Len:4-- 62 6c 61 d0
は解決策を見つけた: スキップ、奇数バイトを今私が緩んでデータをしませんエンコーディングUTF-16LE
を、使用している、とさえバイトを送信
ソリューション:
void function(void)
{
String a = "bla";
char x = 0xD0;
a += x;
Log.d(TAG,"TEST: "+a);
String mm = "-- ";
byte[] buffer = null;
try {
buffer = a.getBytes("UTF-16LE");
} catch (UnsupportedEncodingException e) {
Log.e(TAG, e.getMessage());
}
for (int i = 0; i < buffer.length;) {
mm += i +":"+Integer.toHexString(buffer[i]) + ",";
/* Skip odd bytes as using "UTF-16LE" encoding */
i+=2;
}
Log.e(TAG, "Len:"+buffer.length+mm);
}
結果:
Len:8-- 0:62,2:6c,4:61,6:ffffffd0,
'byte'sは-128〜127に、' char'sは正の0〜65535になります。符号拡張のためにおそらく 'char' 0xFFD0を' String'に追加しています。 – AJNeufeld
はい、 '(byte)x'としてキャストすると' Len:6 - 62 6c 61 2d 34 38'となり、0xffで 'and'することでunsignedに変換します。私は '3f'がどのようにそこに到達しているのか分からない。 –
"0xD0&0xFF"は "0xD0"です。 "(バイト)(0xD0&0xFF)"は-48です。 – AJNeufeld