0

私は as3 で ByteArray を使用する初心者であり、助けが必要です。C# 関数から ByteArray を返す 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;
    }
4

1 に答える 1

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

上記は から 2 バイトを書き込んでいるのでpacketType、ビッグエンディアンに相当しwriteShort()ます。

于 2013-08-07T21:52:46.570 に答える