web-dev-qa-db-ja.com

辞書またはリストをbyte []に​​変換します

わかりました。こことUnityフォーラムの両方で、ある形式から別の形式への変換について尋ねる同様の質問をたくさん見ました。 (うまくいけば)簡単な質問がありますが、答えが見つかりません。 Prime31のgame-centerプラグインを使用して、ターンベースのマルチプレイヤーゲームを処理しています。 Prime31のプラグイン内で、他のプレーヤーに送信するbyte []を要求します。 (状態データ)問題は、リストをバイト配列に変換してから、それらをバイト配列から元に戻すための良い方法は何でしょうか?

参考までに、これは必要なだけ複雑なクラスです。後でメンバーを追加する必要があるかもしれませんが、異なるタイプは追加しません。また、int(手持ちのカード)のリストは、PokerPlayersのリストをbyte []に​​変換するのが簡単であれば、4つの別々のintにすることができます。また、このリストには設定された長さではありませんが、常に4〜8になります。

public class PokerPlayer{   
    public string playerID;
    public string alias;
    public int wildCard;
    public List<int> cardsInHand;
    public int chips;   
}

答えを見ると、すぐに答えが見えないので平手打ちするような気がします。関連資料へのポインタ/リンクはどれも素晴らしいでしょう、私は今、似たような(とても似ている)がまったく同じ質問ではない良い3時間グーグルを検索しました。

8
Grindz

シリアル化を試してみることをお勧めします。

var binFormatter = new BinaryFormatter();
var mStream = new MemoryStream();
binFormatter.Serialize(mStream, myObjToSerialize);

//This gives you the byte array.
mStream.ToArray();

そして、バイト配列をオブジェクトに戻したい場合は、次のようにします。

var mStream = new MemoryStream();
var binFormatter = new BinaryFormatter();

// Where 'objectBytes' is your byte array.
mStream.Write (objectBytes, 0, objectBytes.Length);
mStream.Position = 0;

var myObject = binFormatter.Deserialize(mStream) as YourObjectType;
25
Timeout

データをバイトストリームに(およびその逆に)変換することをserialization(および逆シリアル化)と呼びます。

BinaryFormatter クラスを使用してこれを行うことができます。

2
nvoigt