0

When I use Java to convert a special string to byte[], its result is:

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

and when I use objective-c to convert the same string, its result is:

78
237
185
202
195
169
12
157

Why the byte element is greater than 128 in objective-c? I know the reason is about unsigned, but how to resolve it?

4

2 回答 2

0

看起来 Java 字节是有符号的,而 Objective-C 字节是无符号的。如果将 256 添加到小于 0 的 Java 字节,则会得到相应的 Obj-C 字节(>= 0 的 Java 字节已经与 Obj-C 字节相同)。它应该很容易转换。

于 2012-04-12T01:43:50.270 回答
0

处理这个问题的方法是简单地将 Java 字节“视为”无符号,当您将它们打印出来或进行比较时。最简单的方法是使用byteValue & 0xFF将字节的无符号值作为 int 获取,但一些库可以减轻痛苦——例如,使用Guava's UnsignedBytes,您可以UnsignedBytes.join(" ", byteArray)获取空格分隔的无符号字节,如78 237 185 ...您给出的举个例子。(披露:我为 Guava 做出了贡献。)

于 2012-04-12T01:43:27.517 回答