当我使用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