2013-08-07 4 views
0

Я ноб с использованием ByteArray в as3 и нуждаюсь в некоторой помощи. Я пытаюсь воспроизвести эту функцию «Заголовок» в as3, возвращая ByteArray из функции C# (приведенный ниже код). Может ли кто-нибудь указать мне в правильном направлении?Функция ByTeArray AS3 от функции C# нужна помощь

я попал в этот момент и не знаю, как продолжить:

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

Использования байт арифметики:

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

С выше пишут два байта из packetType, это эквивалентно больших обратного порядка байт writeShort() ,

+0

Благодарим вас за быстрый ответ. Я попробую это. – BlendMode

+0

Если я хочу выполнить бит арифметики ... как бы я сделал это в as3? – BlendMode

+0

Огромное вам спасибо. Я все еще работаю над этим и не получаю результат, который мне нужен ... чтобы получить закрытый const byte bv = 2; ... header [4] = bv; для AS3 это header.writeByte (2); или header.writeInt (2); ??? – BlendMode

Смежные вопросы