我有一个旧的AIR文件,工作正常。我试图重新编译它,但生成的airfile有问题。
在挖掘代码之后,我发现在某些地方字符串被解析为整数,并且结果int与字符串不对应。 所以我制作了一个简单的Actionscript文件并执行了代码:
var test:int = parseInt("3710835714");
并且变量将具有值
-584131582
所以这看起来像溢出。但我很惊讶我的空气文件(我没有自己编译)运行得很好。所以我想知道 - int的内部表示是否取决于用于编译的Flex或AIR sdk库的版本?
//编辑:它似乎归结为这个测试:
var obj:Object = new Object();
obj.val="3710835714";
var test1:Boolean = (obj.val==-584131582);
var test2:Boolean = (int(obj.val)==-584131582);
这为我评估
test1=false;
test2=true;
但是 - 这个旧的AIR文件似乎将两种情况都评估为true。怎么会这样?
答案 0 :(得分:3)
由于Give number超出了ActionsScript Int限制
,因此发生了这种情况int数据类型在内部存储为32位整数,并包含从 -2,147,483,648(-231)到2,147,483,647 (231 - 1)的整数集,
且数字 3,710,835,714 超过 1563352067
但您的解析结果显示编译器将其视为Uint,其最大限制为 4,294,967,295 ,即
-584131581 = 3,710,835,714 - 4,294,967,295
这个博客可以帮助你 ActionScript 3 Number data type problem with long integer values
希望有效