将int转换为字节 - Java和&动作

时间:2013-02-06 02:25:52

标签: java actionscript integer byte

我想将整数转换为字节。我在Actionscript中有一个例子,我需要将它转换为Java。为简单起见,我们假设只有一个数字1234.这是我的Java代码:

int[] a = {1234};
ByteBuffer byteBuffer = ByteBuffer.allocate(a.length * 4);
IntBuffer intBuffer = byteBuffer.asIntBuffer();
intBuffer.put(a);
byte[] array = byteBuffer.array();
for (int i=0; i < array.length; i++) {
    Log.i(T, i + ": " + array[i]);
}

这给了我以下结果:

0 : 0
1 : 0
2 : 4
3 : -46

在Actionscript中我有这个:

var c:ByteArray = new ByteArray;
c.writeInt(1234);
for(var p:uint=0; p<c.length; p++) {
    trace(p+" : "+c[p]);
}

结果:

0 : 0
1 : 0
2 : 4
3 : 210

我做错了什么,为什么结果不同?谢谢!

3 个答案:

答案 0 :(得分:2)

Java使用无符号字节。

默认情况下,ActionScript可能已签名

3 : -46 //signed
3 : 210 //unsigned

这可以将每个字节打印为无符号:

System.out.println((b < 0 ? 256 + b : b));

答案 1 :(得分:2)

在java中,当转换为另一种类型时,字节始终被视为已签名。这就是你看到负数的原因。

尝试:

Log.i(T, i + ": " + (array[i] & 0xff))

答案 2 :(得分:0)

如果您转换-46 to a hex,您将获得0xD2,可以将其转换回210的小数。 这是无符号整数和有符号整数之间的区别。

所以结果确实是相等的(相同,但不相同) 只要两个代码产生相同的字节(D2),你就可以了。

哦,如果您不确定,只要让两个代码都提供十六进制值而不是结果的十进制值,或者确保两者都返回有符号或无符号整数,而不是如上所述,那么您将获得相同的结果;)

例如检查actionscript中的c 用这些方法:

readInt()
and
readUnsignedInt()

你应该看到readint返回-46和readunsignedint 210