- ベストアンサー
C#のキャスト?
C#でのキャスト(?)で困ってます。 うまく説明できないので、下にCっぽい処理を書きます。 struct _hoge{ int i; char c[4]; double d; }; void f(){ BYTE data[16]; stream.read(data); // 何かから16Byte読み込み _hoge *st = (_hoge*)data; // ←ここ TRACE("%d,%c,%f",data->i,data->c[0],data->d); } //(結構いいかげんです) 上記処理のように、BYTEの配列で取得したデータを「struct _hoge」の型にキャストしてそれぞれの要素を取り出す、ということをC#で実現したいのですがMSDNやWebを結構探したのですがわかりませんでした。(何で検索していいのかがわかりませんでした・・・) 実現方法(もしくは検索キーワード)がわかる方、教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
VB.NETだとランダムアクセスで簡単なのですが.. C#なら http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=11404&forum=7
その他の回答 (1)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
そういう処理はシリアライズといいます。 適当なクラスや構造体は[Serializable]と宣言することでシリアライズできるようになります。 以下サンプル //------------------------------------------------------------------- using System; using System.IO; using System.Runtime.Serialization.Formatters.Binary; [Serializable] struct Hoge { public int i; public char[] c; public double d; override public string ToString(){ return String.Format("i:{0}\nc:{1}{2}{3}{4}\nd:{5}", this.i, this.c[0],this.c[1],this.c[2],this.c[3], this.d ); } }; class Sample { public static void Main(){ Hoge aHoge; aHoge.i=10; aHoge.c= new char[4]; aHoge.c[0]='T'; aHoge.c[1]='E'; aHoge.c[2]='S'; aHoge.c[3]='T'; aHoge.d=3.1415926; // 保存 FileStream file = File.Open("Hoge.DAT", FileMode.Create); BinaryFormatter aBinFormat = new BinaryFormatter(); aBinFormat.Serialize(file, aHoge); file.Close(); aHoge = new Hoge();//中身を別のオブジェクトにする // 読込 if(File.Exists("Hoge.DAT")){ file = File.Open("Hoge.DAT",FileMode.Open); aBinFormat = new BinaryFormatter(); aHoge = (Hoge)aBinFormat.Deserialize(file); file.Close(); } Console.Write(aHoge); } }
お礼
ありがとうございます。 ストリームから直接データが取れる場合は、こんな感じになるんですね。大変勉強になりました。
お礼
ありがとうございます。 私と同じような質問って、やっぱりあったんですね。 大変参考になりました。