C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

バイト配列を構造体にコピーするには?


(過去ログ 2 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■1958 / inTopicNo.1)  バイト配列を構造体にコピーするには?
  
□投稿者/ nish 伍長(12回)-(2005/11/22(Tue) 18:43:03)

分類:[C#] 


分類:[C#] 

TCP/IPで受信したデータを構造体に格納したいのです。

 System.IO.MemoryStream ms = new System.IO.MemoryStream();
 byte[] RecvBuf = new byte[442];
 ReadLen = clntStm.Read( RecvBuf, 0, 442 );
 wkms.Write( RecvBuf, 0, ReadLen );
 //---これを構造体abcに格納したい!!

どうすればいいのですか?
お願いします。


0
引用返信 編集キー/
■1959 / inTopicNo.2)  Re[1]: バイト配列を構造体にコピーするには?
□投稿者/ 中博俊 神(260回)-(2005/11/22(Tue) 19:01:11)
中博俊 さんの Web サイト

分類:[C#] 

一発では無理ですので、一バイト一バイト判断していってください。

0
引用返信 編集キー/
■1960 / inTopicNo.3)  Re[2]: バイト配列を構造体にコピーするには?
□投稿者/ nish 伍長(13回)-(2005/11/22(Tue) 19:33:04)

分類:[C#] 

始めは1バイトずつやろうと思ったのですが、、、
こんなのを見つけたんですが危険ですか?

IntPtr ptr = Marshal.UnsafeAddrOfPinnedArrayElement(wkms.ToArray(),0);
abc work = (abc)Marshal.PtrToStructure(ptr,typeof(abc));

これで問題なく格納できましたが。。。


0
引用返信 編集キー/
■1965 / inTopicNo.4)  Re[3]: バイト配列を構造体にコピーするには?
□投稿者/ 中博俊 神(261回)-(2005/11/23(Wed) 11:32:12)

分類:[C#] 

まぁとりあえずそんなことすれば安全じゃなくなりますよ。
IntPtrが何者かわかっていないのであればやめましょう。
わかっていれば、十分注意してやってもいいかもしれませんけどね・・・

0
引用返信 編集キー/
■1969 / inTopicNo.5)  Re[4]: バイト配列を構造体にコピーするには?
□投稿者/ nish 伍長(14回)-(2005/11/24(Thu) 11:41:27)

分類:[C#] 

ポインタで慣れてしまっているんで、
こっちでやります。。。

解決済み
引用返信 編集キー/
■1999 / inTopicNo.6)  Re[4]: バイト配列を構造体にコピーするには?
□投稿者/ NyaRuRu 二等兵(1回)-(2005/11/27(Sun) 00:31:58)

分類:[C#] 

解決されたようですが,後から参照される方がいらっしゃるかもしれんませんので念のため.

MSDN の Marshal.UnsafeAddrOfPinnedArrayElement の説明を読むと,呼び出し側の責任で pinning せよとあるので,もしそれを行っていなかった場合 (GC タイミングによっては) 突然クラッシュしたり,データが化けたりするように見えるかもしれませんね.
.NET の GC の実装や標準マーシャラの動作,CLR の unmanaged モードと必要権限などを知っていて使う分には便利かと思います.

0
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -