簡體   English   中英

Java字符串到字節轉換問題

[英]Java String to byte conversion issue

我有一些測試代碼沒有按照我的預期工作,在審查了各種網站和規范后,我仍然無法弄清楚發生了什么。

這是我的測試代碼:

byte[] b = new byte[8];
b[0] = (byte)0x72;
b[1] = (byte)0x3A;
b[2] = (byte)0x60;
b[3] = (byte)0x01;
b[4] = (byte)0x0E;
b[5] = (byte)0x10;
b[6] = (byte)0x8A;
b[7] = (byte)0x11;
String bitmapStr = new String(b);
try {
    b = bitmapStr.getBytes("US-ASCII");
} catch (Exception ex) {
    ex.printStackTrace();
}
System.out.println("DEBUG: bitmapStr = \"" +bitmapStr + "\"");
for (int i=0; i<=7; i++) {
    int byte1 = b[i];
    System.out.println("byte"+i + ": " + Integer.toHexString(byte1));
}

當我運行程序時,我在控制台輸出中得到以下內容:

DEBUG: bitmapStr = "r:`�"
byte0: 72
byte1: 3a
byte2: 60
byte3: 1
byte4: e
byte5: 10
byte6: 3f
byte7: 11

看看byte6即b [6]如何從我的字節數組輸出0x3F,但它應該是0x8A。

有什么想法嗎?

順便說一句,如果我使用UTF-8編碼,我會得到一個更加時髦的輸出(雖然ASCII是正確的)。

UTF-8字符串編碼輸出:

byte0: 72
byte1: 3a
byte2: 60
byte3: 1
byte4: e
byte5: 10
byte6: ffffffef
byte7: ffffffbf

嘗試另一種形式的String構造函數:

String bitmapStr = new String(b,"ISO-8859-1");

嘗試這樣的方法將字符串更改為字節: -

  String source = "2675326";
 byte[] byteArray = source.getBytes("UTF-16LE");

或將您的代碼更改為: -

 String bitmapStr = new String(b,"US-ASCII");

您強制十六進制變為字節(8位)。 這稱為鑄造,你不能這樣做。 您注意到所有值都有一個良好的輸出, except when 0xYZ where Y >=8 ! 除非你確定你不會丟失信息,否則不要使用鑄造。

根據Rahul的建議和不可原諒我明白了:

當我改為UTF-16LE / ISO-8859-1編碼時,byte6輸出為:“ffffff8a”,然后我意識到我在這里執行從byte到int的類型轉換:

int byte1 = b[i];

所以我剛補充說:

int byte1 = b[i] & 0xFF;

為了正確的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM