سؤال

I currently have tried something like this, but unfortunately it doesn't compile.

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
}

Error I get

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) |

Is there any function which can do it maybe in one line as well, maybe by String index.

I know I'm not using ByteArray's which probably would would of had no problem. But In the Socket I do something like this

recvPacketData = socket.readUTFBytes(recvPacketSize);

So I don't have access to any ByteArray's at this point.

هل كانت مفيدة؟

المحلول

Got it to compile turns out if you want to convert a String back into a ByteArray you just have to fill the ByteArray like ByteArray.writeUTFBytes(String);

Here is my example I got it to compile like this.

    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) {
            //...
        }
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top