【问题标题】:Flex ActionScript 3 How to Transform part of String to Big Endian Integer?Flex ActionScript 3 如何将部分字符串转换为大端整数?
【发布时间】:2014-03-13 08:45:20
【问题描述】:

我目前已经尝试过类似的方法,但不幸的是它无法编译。

public function processPacket(event:PacketEvent):void { 
    var packetType:int = event.packetType;
    var packetData:String = event.packetData;
    var size:int = ((((byte)packetData.charAt(0)) & 0xff) << 24) | ((((byte)packetData.charAt(1)) & 0xff) << 16) |
                   ((((byte)packetData.charAt(2)) & 0xff) << 8)  | (((byte)packetData.charAt(3)) & 0xff);

    //...
    //TODO: Retrieve String based on the size above.
    // processedSize += size;
    //Then if(packetData.length > processedSize) size = old string +1
}

我得到的错误

C:\src\flash.mxml(111):  Error: Syntax error: expecting rightparen before packetData.

                        var size:int = ((((byte)packetData.charAt(0)) & 0xff) <<
 24) | ((((byte)packetData.charAt(1)) & 0xff) << 16) |

C:\src\flash.mxml(111):  Error: Syntax error: expecting semicolon before rightparen.

                        var size:int = ((((byte)packetData.charAt(0)) & 0xff) <<
 24) | ((((byte)packetData.charAt(1)) & 0xff) << 16) |

是否有任何函数也可以在一行中完成,可能是通过字符串索引。

我知道我没有使用可能没有问题的 ByteArray。但是在套接字中我做了这样的事情

recvPacketData = socket.readUTFBytes(recvPacketSize);

所以我目前无法访问任何 ByteArray。

【问题讨论】:

    标签: string actionscript-3 apache-flex integer endianness


    【解决方案1】:

    如果你想将String 转换回ByteArray,你只需要像ByteArray.writeUTFBytes(String); 一样填写ByteArray 就可以了。

    这是我的示例,我让它像这样编译。

        public function processPacket(event:PacketEvent):void { 
            var packetType:int = event.packetType;
            var packetData:String = event.packetData;
    
            var packetDataBytes:ByteArray = new ByteArray();
            packetDataBytes.writeUTFBytes(packetData);
    
            var arguments:Array = new Array();
            var size:int = 4; //4 bytes for readInt() + 1 for possible String
            while(packetDataBytes.length > size) {
                size = packetDataBytes.readInt();
                if(size <= 0 || size > 2000000) break;
                arguments.push(packetDataBytes.readUTFBytes(size));
            }
    
            switch(packetType) {
                //...
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2010-09-12
      • 2013-08-14
      • 1970-01-01
      • 2015-07-29
      • 2012-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-06
      相关资源
      最近更新 更多