AS3 由于只有 int, uint, Number类型;所以再跟后台交互时 无法读取Long;(及没有 socket.readLong的方法);
后来项目又需要 发送long; 于是又写了一个 写入long的方法:
static public function writeLong( bytes:ByteArray, value:Number):void
{
var str:String = value.toString(16);
var lgth:int = 16 - str.length;
for( var i:int = 0; i < lgth; i++)
{
str = "0" + str;
}
var subStr:String = str.substr( 0, 8);
bytes.writeUnsignedInt( parseInt( "0x" + subStr));
subStr = str.substr( 8, 8);
bytes.writeUnsignedInt( parseInt( "0x" + subStr));
但后台很多时候 想传long 类型的值; 如时间, 较大数额的钱;
于是写了个 读取long 方法;
static public function readLong( bytes:ByteArray):Number
{
var long:String = "0x";
for (var i:int = 0; i < 8; i++)
{
var numStr:String = bytes.readUnsignedByte().toString(16);
var hexStr:String = numStr.length == 1 ? "0"+numStr : numStr;
long += hexStr;
}
return parseInt( long);
}后来项目又需要 发送long; 于是又写了一个 写入long的方法:
static public function writeLong( bytes:ByteArray, value:Number):void
{
var str:String = value.toString(16);
var lgth:int = 16 - str.length;
for( var i:int = 0; i < lgth; i++)
{
str = "0" + str;
}
var subStr:String = str.substr( 0, 8);
bytes.writeUnsignedInt( parseInt( "0x" + subStr));
subStr = str.substr( 8, 8);
bytes.writeUnsignedInt( parseInt( "0x" + subStr));
}
注意一点的是: 由于AS3中Number型采用的是浮点数格式, 能表示的最大有效位是52位, 所以用Number来存储long的数据,不能超过52位; 不然就会出问题