将actionscript float转换为java

时间:2015-05-18 21:47:39

标签: java actionscript-3 hex

我需要将此动作脚本代码转换为java:

p = 0xe8af7c;    
var ba: ByteArray = new ByteArray();
ba.writeFloat ((p >> 16 & 0xFF) / 255);
ba.writeFloat ((p >> 8 & 0xFF) / 255);
ba.writeFloat ((p & 0xFF) / 255);

这就是我的想法:

int p = 0xe8af7c;
DataOutputStream dos = new DataOutputStream(new FileOutputStream(output));
dos.writeFloat ((p >> 16 & 0xFF) / 255f);
dos.writeFloat ((pix >> 8 & 0xFF) / 255f);
dos.writeFloat ((pix & 0xFF) / 255f);

但这不会产生相同的结果。它应该生成3f 68 e8 e9 3f 2f af b0 3e f8 f8 f9,但它会返回3f 68 d7 98 d7 99 3f 2f c2 af c2 b0 3e d7 a8 d7 a8 d7 a9。这是否意味着actionscript处理不同于java的浮动,这个函数不能像这样转换?我该如何转换此代码?

编辑:这样做的目的是获得p - e8,af和7c的三位数对,将它们转换为整数,即232,175,124,然后除以这些值255,并写入DataOutputStream。

2 个答案:

答案 0 :(得分:2)

使用此代码

import org.apache.commons.codec.binary.Hex;

public static void main(String[] args) throws Exception {
    int p = 0xe8af7c;
    ByteArrayOutputStream bos = new ByteArrayOutputStream(12);
    DataOutputStream dos = new DataOutputStream(bos);
    dos.writeFloat((p >> 16 & 0xFF) / 255f);
    dos.writeFloat((p >> 8 & 0xFF) / 255f);
    dos.writeFloat((p & 0xFF) / 255f);
    System.out.println(Hex.encodeHexString(bos.toByteArray()));
}

我得到以下输出:

3f68e8e93f2fafb03ef8f8f9

符合您想要的结果

3f 68 e8 e9 3f 2f af b0 3e f8 f8 f9

因此,您可能正在为output写一些额外的内容,而这些内容并非在此向我们展示。

另请参阅ByteBuffer了解带转换方法的奇特字节数组。

答案 1 :(得分:1)

您正在将数据正确写入DataOutputStream,但是当您将数据传输到output时它会被损坏,因为数据必须转到控制台,并且您的字节被解释为ANSI字符并获取&# 34;校正"进入UTF-8字符集,导致两个字节被发送到控制台,然后您通过OS管道捕获到文件中。要解决此问题,请使用FileOutputStream将普通文件作为目标而不是output