■63615 / inTopicNo.1) |
C#でクラスのサイズを取得したい |
□投稿者/ howling (4回)-(2012/09/13(Thu) 19:53:37)
|
分類:[.NET 全般]
いつもお世話になっております。
C# VS2008 Windows7上で作業しているのですが、 ここで特定クラスのデータセーブ&ロードを行いたいと考えております。
似たような話があったのですが、
http://bbs.wankuma.com/index.cgi?mode=al2&namber=4995&KLOG=5
「そもそも取得する必要がない」と回答されており、 もしそうであれば別の案が欲しいと思い、ご質問致します。
//この上でbyte[] bytesSaveFileDataにファイルのデータを読み込む unsafe { int iIterator = 0; byte[] bytesNameLength = new byte[4]; Array.Copy(bytesSaveFileData, iIterator, bytesNameLength, 0, 4); int iNameLength = int.Parse(Encoding.Unicode.GetString(bytesNameLength)); //データ名称の長さの取得(必ず4ケタ) iIterator += 4;
byte[] bytesObjectName = new byte[iNameLength]; Array.Copy(bytesSaveFileData, iIterator, bytesTreeNodeName, 0, iNameLength); string strObjectName = Encoding.Unicode.GetString(bytesObjectName); //データ名称の取得 iIterator += iNameLength; //あるクラスにデータをコピーする(このクラスはほぼ構造体のような内容ですが、2,3個メソッドがあるためクラスにしています。) SomeClass clsSomeClass = null; byte[] bytesSomeClassData = new byte[sizeof(SomeClass)]; //ここで、CS0208のエラー Array.Copy(bytesSaveFileData, iIterator, bytesSomeClassData, 0, iNameLength); fixed (byte* pObjData = bytesSomeClassData) { clsSomeClass = *(clsSomeClass*)pObjData; } iIterator += sizeof(SomeClass); //やっぱりCS0208のエラー
//実際はこれより先も続きますので、サイズが欲しいといった具合です。 }
上のコードのコメントにもありますが、
データ名称の長さ データ名称 データA データB ・ ・ ・
のような形のバイナリファイルの読み込みです。
サイズを取得できるような良い方法はありますでしょうか…? あるいは、全く別の方法を教えて頂けますと幸いです。
以上 宜しくお願い致します。
|
|