我需要使用从java到flash的bytearray以二进制格式传输数字 flash as3不支持浮点数和长点数。
那么我怎么能这样做,因为它看起来很麻烦,即使我试图将java转换为long并加倍回来?
public static void main(String[] args) { long l = Long.MAX_VALUE/100; Double d= l; System.out.println("long : " + l); System.out.println("double: " + (long)d); }
run:
long : 92233720368547758
double: 92233720368547760
BUILD SUCCESSFUL (total time: 1 second)
转换为双倍后,长号丢失了原始值!
答案 0 :(得分:1)
你的观察是不精确的。 Flash支持浮动。 AS3中的Number
类是Java中的double
,即IEEE-754双精度64位浮点。但是,它没有long
。 Number
足以存储Java float
,因为它也是一个浮点数,但幅度较小(只需要32位)。 Flash可以读取这些值并将其写入ByteArray,但在类型层次结构中没有对应的类型。
不可能完全类比Java long
,因为存储浮点数的格式保留了一些用于其他目的的位,实际上只使用52位来保存浮点值。
如果真的需要很长时间,你可以在Flash中做些什么:
简单:使用两个整数。
复杂:长数学有几个类,不限制你选择任意数量的位,即你可以对数字进行数学运算,直到超过64位。这些传统上称为BigInt或其他一些。谷歌应该找到至少几个实现。搜索加密库,几乎每一个都需要这个类来运行。
您可能会发现一些有用的信息:
Java原语:
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
Flash顶级类(也包括所有数字类型):
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/package-detail.html#classSummary(不幸的是,它们与其他顶级课程一起列出,但没有太多的课程让它变得非常困难)。
答案 1 :(得分:0)
在动作脚本中,您必须使用“数字”类型。
var myNumber:Number; myNumber = Number.MAX