用as3 ByteArray读取Long型

最近做的一个项目需要从服务端的二进制数据里面读取一个Long型。在国外的网站上发现了一个解决方案,修改一下解决问题。

基本思路是Long型是64位用readByte()读取8回累加为一个16进制的String,然后转换为Number

代码如下

 

package com.pizzaman.utils {

import flash.utils.ByteArray;

 

public class PizzaByteArray extends ByteArray {

public function PizzaByteArray(){

super();

}

public function readLong():Number{

var long:String = "";

for (var i:int = 0; i < 8; i++)

   long += this.readByte().toString(16);

trace(long);

return Number(convertLongToDecimal(long, 16));

}

private function covLongToNum( value:String, radix:uint=2 ):String {

   var cluster:int = Math.round( Math.log(uint.MAX_VALUE) / Math.log(radix));

   if(value.length > cluster * 2) throw new Error("value is more then 64-bits");

   

   var hs:String = value.slice(0,-cluster);

   var ls:String = value.slice(-cluster);

   var i:int;

   for(i = 0; i < cluster; i++){

       hs += "0";

   }

   

   var high:Number = parseInt(hs, radix);

   var low:Number = parseInt(ls, radix);

   

   var dec:String = "";

   var base:int = 10;

   i = 20;

   while(i--){

       var tenn:Number = Math.pow(base, i);

       var div:Number = Math.floor( (high / tenn) + (low / tenn) );

       dec += div.toString();

       div *= tenn;

       var h:Number = Math.floor( div / uint.MAX_VALUE ) * (uint.MAX_VALUE + 1);

       var l:Number = div - h;

       high -= h;

       low -= l;

   }

   

   while(dec.charAt(0) == "0") dec = dec.slice(1);    

   return dec;

}

}

}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值