こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

投稿日時 - 2005-10-11 22:02:22

QNo.1707459

困ってます

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

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

投稿日時 - 2005-10-12 13:01:55

お礼

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

投稿日時 - 2005-10-13 23:20:48

ANo.2

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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);
}
}

投稿日時 - 2005-10-12 00:25:34

お礼

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

投稿日時 - 2005-10-13 23:19:21

あなたにオススメの質問