在開發中,由於使用的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();
}