Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将actionscript浮点转换为java_Java_Actionscript 3_Hex - Fatal编程技术网

将actionscript浮点转换为java

将actionscript浮点转换为java,java,actionscript-3,hex,Java,Actionscript 3,Hex,我需要将此actionscript代码转换为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; Da

我需要将此actionscript代码转换为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。

使用此代码

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
因此,您可能正在为您的
输出
编写一些额外的内容,而您没有在这里向我们展示这些内容


还可以查看带有转换方法的奇特字节数组的
ByteBuffer

您正在将数据正确写入
DataOutputStream
,但当您将其导入
输出时,它会被损坏,因为数据必须进入控制台,并且您的字节被解释为ANSI字符并得到“更正”转换为UTF-8字符集,从而将两个字节发送到控制台,然后通过OS管道将其捕获到文件中。要修复此问题,请使用带有普通文件作为目标的
FileOutputStream
,而不是
output

,后者对于
浮点值来说似乎有很多字节。你在放其他东西吗?请发布一个最小、完整且可复制的示例。@SotiriosDelimanolis我编辑了我的问题,但忘了再添加两行。显然
java.io.FileOutputStream(output)
将收到的字节转换为UTF8字符,这可以解释将
e8
更改为
d7 98
e9
更改为
d7 99
。因此,您遇到了
输出的文本转换问题,默认情况下这是一个文本文件。在actionscript程序的输出中,它在ansi面板中显示如下
?hèè?/“”>ùù
,在hex面板中显示您给出的输出。但是您的程序在ansi窗格中输出十六进制值。你知道如何修复它吗?没关系,实际上出于某种奇怪的原因,输出一直都是正确的。我正在写入一个在十六进制编辑器中打开的文件。@Cobold为什么要将二进制数据写入文本接收器?您的数据已被字符集转换损坏。