我試圖開發一個Android應用程序,我需要在字符串內添加一個字節值(8位)並在byte []中再次讀回。如何將一個字節值(8位)添加到字符串並在Java中以字節讀回
但是,當我再次使用getBytes()將字符串轉換爲byte []時,我得到了一些不同的值。我認爲它的一些編碼或字符集問題。
BTW我是新來的Java編程我在C.
代碼大多代碼:
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.由於符號的擴展,你可能會在'String'中加'char' 0xFFD0。 – AJNeufeld
是的,但是通過'(byte)x'給出'Len:6--62 6c 61 2d 34 38',並用'和'來表示0xff,我將它轉換爲無符號。我不明白'3f'是如何到達那裏的。 –
「0xD0&0xFF」是「0xD0」。 「(字節)(0xD0&0xFF)」是-48。 – AJNeufeld