2010-08-29 74 views
0

我目前的問題是我喜歡通過藍牙發送一些命令到嵌入式設備(16位編碼)。不幸的是,似乎Java中存在轉換錯誤,或者至少我不知道如何處理它。Android的java轉換問題

這些位是例如1001 0010 1011 0010 我想過爲此使用char(16位),但有時它會被Java轉換爲24位(3個印刷字符),當我嘗試將它添加到字符串中時。這取決於整數值。

我怎樣才能得到打印的ASCII(或其他)字符?藍牙功能需要一個字符串作爲參數。

 int a = 127, b = 221; // 0-255 32 bit 
      char p1 = (char) b; // 0000 0000 bbbb bbbb 16 bit 
      char p2 = (char) a; // 0000 0000 aaaa aaaa 16 bit 

      // bbbb bbbb aaaa aaaa 
     char anUnsignedShort = (char) ((p1 << 8) | p2); // 16 bit 
     System.out.println(""+(char)2+anUnsignedShort+(char)3); 
     // ???? ???? bbbb bbbb aaaa aaaa -- 24bits sometimes. Why ??? 
+0

那麼,我發現它是一個真正的java問題,通過打印(字符)137到139 ...我怎樣才能打印139爲8位字符? (6466): I/System.out(6466): I/System.out(6466):012ï – Nils 2010-08-29 16:58:54

+0

我看到http://www.fileformat.info /info/unicode/char/252c/index.htm,後面跟着http://www.fileformat.info/info/unicode/char/00eb/index.htm,http://www.fileformat.info/info/unicode/ char/00e8/index.htm和http://www.fileformat.info/info/unicode/char/00ef/index.htm。這些與你的問題有什麼關係? – trashgod 2010-08-29 18:51:32

回答

0

瞭解String Concatenation Operator +的隱式轉換可能很有用。另外,考慮byte[],適合OutputStream

byte[] ba = {(byte) 2, (byte) 221, (byte) 127, (byte) 3}; 
System.out.println(Arrays.toString(ba)); 

附錄:

我需要它作爲character - 在這種情況下,4個字節0×02,

除了你會得到平臺的默認字符編碼外,同樣的原則也適用。

char[] ca = {(char) 2, (char) 221, (char) 127, (char) 3}; 
System.out.println(Arrays.toString(ca)); 
+0

你的代碼輸出是[2,-35,127,3] ...我需要它作爲字符 - 在這種情況下,4個字節0x02,... – Nils 2010-08-29 17:32:18

+0

@Nils:我已經詳細闡述了上述內容。如果相關,您將獲得平臺的默認字符編碼,而不是設備的編碼。 – trashgod 2010-08-29 18:24:00