1

プログラムを C++ に移植していますが、少し問題があります。C# で byte[] を作成するこのコードがあります。

writer.New(0x484700C0);
    {
        writer += Functions.PadString("PTEmu", 0x10);
        writer += new byte[] { 0xC9, 0x32, 0xE0, 0x4D, 0xEB, 0x01 };
        writer.SkipBytes(6);
        writer += 1;
        writer += channels.Count; // sub count


        for (int i = 0; i < channels.Count; i++)
        {
            writer += Functions.PadString(channels[i].Item4, 0x20); // len = 0x20
            writer += Functions.PadString(channels[i].Item2, 0x14);
            writer += Functions.PadString(channels[i].Item2, 0x14);
            writer += Functions.PadString(channels[i].Item2, 0x14);


            writer += channels[i].Item3; // int, size = 4
            writer += channels[i].Item3;
            writer += channels[i].Item3;
            writer += 0;
        }


        writer += Functions.PadString("Clan", 32);
        writer += Functions.PadString("127.0.0.1", 0x14);
        writer += Functions.PadString("127.0.0.1", 0x14);
        writer += Functions.PadString("127.0.0.1", 0x14);
        writer += 80;
        writer += 80;
        writer += 80;
        writer.SkipBytes(12);
    }

私は次のようなことを考えました:

struct PT_ServerList{
    int size;
    int opcode;
    char server[0x10];
    char bla[6];
    int reserved1;
    short reserved2;
    int unknow;
    int serverCount;
    ServerInfo servers[];
};

しかし、servers[] の後にさらに変数を追加する必要がありますが、コンパイラは構造体を受け入れません。これを解決するにはどうすればよいですか?

4

2 に答える 2

2

ベクトルを使用します:

struct PT_ServerList {
    ...
    std::vector<ServerInfo> servers;
    ...
};
于 2012-05-19T17:28:34.503 に答える
1

おそらく次のいずれかを使用する必要があります。

ServerInfo *servers;

(この場合、「new []」を使用して配列を割り当て、「delete []」を使用して割り当てを解除する必要があります); また:

std::vector<ServerInfo> servers;

(この場合、以前に使用したことがない場合は、使用方法についてstd::vectorのドキュメントstd::vectorを参照してください。

于 2012-05-19T17:29:31.290 に答える