2013-08-07 9 views
0

나는 as3에서 ByteArray를 사용하는 멍청한데, 도움이 될 것입니다. C# 함수 (By code 제공)에서 ByteArray를 반환하는 as3에서이 "Header"함수를 재현하려고합니다. 누구나 올바른 방향으로 나를 가리킬 수 있습니까?ByTeArray C# 함수의 AS3 함수가 필요합니다.

private function header():ByteArray 
    { 
     var header:ByteArray = new ByteArray(); 
     header.writeUTFBytes("A"); 
     header.writeUTFBytes("B"); 
     header.writeUTFBytes("C"); 
     header.writeUTFBytes("D"); 
      ...     
    } 

당신에게

private enum PacketType 
    { 
     PtHelo = 0x01, 
     PtBye = 0x02, 
     PtButton = 0x03, 
     PtMouse = 0x04, 
    } 

private const byte bv = 2; 
private const byte mv = 0; 

private byte[] Header(PacketType packetType, int numberOfPackets, int currentPacket, int payloadSize) 
    { 
     var header = new byte[HeaderSize]; 
     header[0] = (byte)'A'; 
     header[1] = (byte)'B'; 
     header[2] = (byte)'C'; 
     header[3] = (byte)'D'; 
     header[4] = bv; 
     header[5] = mv; 
     if (currentPacket == 1) 
     { 
      header[6] = (byte)(((ushort)packetType & 0xff00) >> 8); 
      header[7] = (byte)((ushort)packetType & 0x00ff); 
     } 
     else 
     { 
      header[6] = ((ushort)PacketType.PtBlob & 0xff00) >> 8; 
      header[7] = (ushort)PacketType.PtBlob & 0x00ff; 
     } 
     header[8] = (byte)((currentPacket & 0xff000000) >> 24); 
     header[9] = (byte)((currentPacket & 0x00ff0000) >> 16); 
     header[10] = (byte)((currentPacket & 0x0000ff00) >> 8); 
     header[11] = (byte)(currentPacket & 0x000000ff); 
     header[12] = (byte)((numberOfPackets & 0xff000000) >> 24); 
     header[13] = (byte)((numberOfPackets & 0x00ff0000) >> 16); 
     header[14] = (byte)((numberOfPackets & 0x0000ff00) >> 8); 
     header[15] = (byte)(numberOfPackets & 0x000000ff); 
     header[16] = (byte)((payloadSize & 0xff00) >> 8); 
     header[17] = (byte)(payloadSize & 0x00ff); 
     return header; 
    } 

답변

0

기본적으로 배열 인덱스와 비트 연산 동일하게 사용할 수 있습니다 헤더 함수의 나머지 감사합니다

나는 계속하는 방법을 잘이 지점에 도착하지 C# 버전 (캐스트 만 제거). 바이트 산술 사용

header.endian = Endian.BIG_ENDIAN; // important for writing multibyte below 
header.writeUTFBytes('ABCD'); 
header.writeByte(bv); 
header.writeByte(mv); 
if (...) { 
    header.writeShort(packetType); 
} else { 
    header.writeShort(PtBlob); // PtBlob is a constant defined elsewhere 
} 
header.writeInt(currentPacket); 
... 

: :하지만 산술을 피하기 위해 간단 수 있습니다 packetType에서 위 쓰고 두 바이트 이후

header.writeByte((packetType & 0xff00) >> 8); 
header.writeByte(packetType & 0x00ff); 

를, 그것은 writeShort() 빅 엔디안과 동일입니다 .

+0

신속한 답변을 부탁드립니다. 나는 이것을 시도 할 것이다. – BlendMode

+0

비트 연산을하고 싶다면 as3에서 어떻게 할 수 있을까요? – BlendMode

+0

정말 고마워 .. 난 아직도 그것에 노력하고있어 내가 원하는 결과를 얻지 못하고 ... 개인 const 바이트를 얻으려면 bv = 2; ... 헤더 [4] = bv; AS3에이 header.writeByte (2); 또는 header.writeInt (2); ??? – BlendMode