• ベストアンサー

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を結構探したのですがわかりませんでした。(何で検索していいのかがわかりませんでした・・・) 実現方法(もしくは検索キーワード)がわかる方、教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2

VB.NETだとランダムアクセスで簡単なのですが.. C#なら http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=11404&forum=7

punio
質問者

お礼

ありがとうございます。 私と同じような質問って、やっぱりあったんですね。 大変参考になりました。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

そういう処理はシリアライズといいます。 適当なクラスや構造体は[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); } }

punio
質問者

お礼

ありがとうございます。 ストリームから直接データが取れる場合は、こんな感じになるんですね。大変勉強になりました。

関連するQ&A

専門家に質問してみよう