在开发中,由于使用的ID需要用到64位uint ,但是as3 最大的number也只支持到53位,这个数值也足以满足双方需求,故而双方用64为uint传输(8字节),数值上限53位。
其思想也比较简单,打包时将number类型值拆分成2个uint往ByteArray里写。解包时也按2个uint方式读取,再做个移位就搞定了。双方传输都采用大端方式编码。
public function TestDemo()
{
var bin:ByteArray = writeNumber(8899999699899979);
var val:Number = readNumber(bin);
trace("================= 数值: "+val);
}
public function writeNumber(val:Number):ByteArray
{
var data:ByteArray = new ByteArray();
var bin:ByteArray = new ByteArray();
bin.writeUnsignedInt(int(val / 4294967295));
bin.writeUnsignedInt(int(val));
data.writeBytes(bin);
bin = null;
data.position = 0;
return data;
}
public function readNumber(bin:ByteArray):Number
{
var data:uint = bin.readUnsignedInt();
return (data) * 256 * 256 * 256 * 256 + bin.readUnsignedInt();
}