2012-04-12 33 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字节相同)。它应该很容易转换。