[英]Flex ActionScript 3 How to Transform part of String to Big Endian Integer?
我目前已經嘗試過類似的方法,但是不幸的是它無法編譯。
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) |
是否有任何功能可以同時在一行中完成此操作,也許可以通過String索引完成。
我知道我沒有使用ByteArray,這可能不會有問題。 但是在套接字中,我做這樣的事情
recvPacketData = socket.readUTFBytes(recvPacketSize);
所以我目前無法訪問任何ByteArray。
如果要將String
轉換回ByteArray
,就可以編譯了,只需要像ByteArray.writeUTFBytes(String);
一樣填充ByteArray
ByteArray.writeUTFBytes(String);
這是我的示例,我可以像這樣進行編譯。
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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.