當我使用Java
一個特殊的字符串轉換爲byte [],其結果是:Objective-C的字節[]和Java字節[]
78
-19
-71
-54
-61
-87
12
-99
,當我使用objective-c
相同的字符串轉換,其結果是:
78
237
185
202
195
169
12
157
爲什麼字節元素比objective-c
128
更大?我知道原因是關於unsigned
,但如何解決呢?
當我使用Java
一個特殊的字符串轉換爲byte [],其結果是:Objective-C的字節[]和Java字節[]
78
-19
-71
-54
-61
-87
12
-99
,當我使用objective-c
相同的字符串轉換,其結果是:
78
237
185
202
195
169
12
157
爲什麼字節元素比objective-c
128
更大?我知道原因是關於unsigned
,但如何解決呢?
解決這個問題的方法很簡單,就是在將Java字節打印出來或進行比較時,將它們視爲無符號數據。最簡單的方法是使用byteValue & 0xFF
來獲取一個字節的無符號值作爲int,但是一些庫可以減輕痛苦 - 例如,使用Guava'sUnsignedBytes
,您可以使用UnsignedBytes.join(" ", byteArray)
來獲得空格分隔的無符號字節,例如以你給出的78 237 185 ...
爲例。 (披露:我貢獻番石榴。)
我用objective-c用DES加密字符串,但結果不等於用java加密,所以我問這個問題!你能給我一個解決方案嗎? – dale 2012-04-12 04:44:24
它看起來像Java字節簽名和Objective-C字節未簽名。如果將256添加到小於0的Java字節中,則會得到相應的Obj-C字節(> = 0的Java字節已經與Obj-C字節相同)。它應該很容易轉換。
使用帶符號的字節。 – dayitv89 2012-04-12 05:07:24