dポイントプレゼントキャンペーン実施中!

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

A 回答 (2件)

VB.NETだとランダムアクセスで簡単なのですが..


C#なら
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.ph …
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/10/13 23:20

そういう処理はシリアライズといいます。


適当なクラスや構造体は[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);
}
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/10/13 23:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!