zoukankan      html  css  js  c++  java
  • ActionScript3中的Int64与ByteArray转换

    ActionScript3中没有int64(long)类型,因此在与其它语言写的应用程序进行数据通信及交互时,存在数据转换的问题。如网络传输中Int64的网络字符序列要能够成功接收和发送,而ByteArray中又没有相应的读写方法,只提供了对short,int,uint,double,float,String,Object等数据的类型的read和write方法。内容可参见AS3帮助文档中的ByteArray类

    如果要实现Int64与ByteArray的相互转换,可实现的方法有很多:

    Int64与ByteArray的相互转换 方法一

    //Int64转换成ByteArray
    public function writeInt64(bigInt:Number):ByteArray {
        const zeros:String = "00000000";
        var bytes:ByteArray = new ByteArray();
        var str = bigInt.toString(16);
        str = zeros.substr(0,16-str.length)+str;
        bytes.writeUnsignedInt(parseInt(str.substr(0,8),16));
        bytes.writeUnsignedInt(parseInt(str.substr(8,8),16));
        bytes.position = 0;
        return bytes;
    }
    
    //ByteArray转换成Int64
    public function readInt64(bytes:ByteArray):Number {
        const zeros:String = "00000000";
        var s:String = bytes.readUnsignedInt().toString(16);
        var str:String = zeros.substr(0,8-s.length) + s;
        s = bytes.readUnsignedInt().toString(16);
        str += zeros.substr(0,8-s.length) + s ;
        return Number(parseInt(str, 16).toString());
    }

    Int64与ByteArray的相互转换 方法二

    //http://stackoverflow.com/questions/9504487/number-type-and-bitwise-operations
    //Int64 to ByteArray
    public function writeInt64(n:Number):ByteArray                   
    {                                                                         
        // Write your IEEE 754 64-bit double-precision number to a byte array.
        var b:ByteArray = new ByteArray();                                    
        b.writeDouble(n);   
        
        trace("--"+n);
        for(var i:int = 0 ;i<b.length;i++)
        {
            trace(b[i].toString(2));
        }
        trace("--"+n);
                                                          
        var e:int = ((b[0] & 0x7F) << 4) | (b[1] >> 4); // 取得指数 
        var s:int = e - 1023;  // Significant bits. 
        var x:int = (52 - s) % 8; // Number of bits to shift towards the right. 
        var r:int = 8 - int((52 - s) / 8);  // Read and write positions in the byte array.                                    
        var w:int = 8;
        
        // Clear the first two bytes of the sign bit and the exponent.        
        b[0] &= 0x80;                                                         
        b[1] &= 0xF;                                                           
        // Add the "hidden" fraction bit.                                     
        b[1] |= 0x10;                                                      
        // Shift everything.                                                  
        while (w > 1) {                                                       
            if (--r > 0) {                                                    
                if (w < 8)                                                    
                    b[w] |= b[r] << (8 - x);                                  
                                                                              
                b[--w] = b[r] >> x;                                           
                                                                              
            } else {                                                          
                b[--w] = 0;                                                   
            }                                                                 
        }                                                                                  
        // Now you've got your 64-bit signed two's complement integer.        
        return b;                                                             
    }
    
    //ByteArray to Int64
    public function readInt64(bytes:ByteArray):Number {
        //待实现
        return 0;
    }

    对于ActionScript加入对Int64数据的支持,Google Code中有开源的类。

    开源类一

    开源类二

    专注于机器学习、前端相关邻域。关注 全栈深入 公众号查看更多硬核文章。
  • 相关阅读:
    回顾:异常处理,值传递和引用传递
    回顾:静态变量和实例变量、构造器
    多态、抽象类与接口
    回顾:面向对象、基本类型
    总结一下《深入理解Java虚拟机》
    百度实习生面试题
    面试题
    阿里面试
    Shell
    Collector详解
  • 原文地址:https://www.cnblogs.com/janas/p/3112676.html
Copyright © 2011-2022 走看看