2012-04-12 64 views
0

當我使用Java一個特殊的字符串轉換爲byte [],其結果是:Objective-C的字節[]和Java字節[]

78 
-19 
-71 
-54 
-61 
-87 
12 
-99 

,當我使用objective-c相同的字符串轉換,其結果是:

78 
237 
185 
202 
195 
169 
12 
157 

爲什麼字節元素比objective-c128更大?我知道原因是關於unsigned,但如何解決呢?

+0

使用帶符號的字節。 – dayitv89 2012-04-12 05:07:24

回答

0

解決這個問題的方法很簡單,就是在將Java字節打印出來或進行比較時,將它們視爲無符號數據。最簡單的方法是使用byteValue & 0xFF來獲取一個字節的無符號值作爲int,但是一些庫可以減輕痛苦 - 例如,使用Guava'sUnsignedBytes,您可以使用UnsignedBytes.join(" ", byteArray)來獲得空格分隔的無符號字節,例如以你給出的78 237 185 ...爲例。 (披露:我貢獻番石榴。)

+0

我用objective-c用DES加密字符串,但結果不等於用java加密,所以我問這個問題!你能給我一個解決方案嗎? – dale 2012-04-12 04:44:24

0

它看起來像Java字節簽名和Objective-C字節未簽名。如果將256添加到小於0的Java字節中,則會得到相應的Obj-C字節(> = 0的Java字節已經與Obj-C字節相同)。它應該很容易轉換。