掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
構造体->Byte配列->構造体とコピーする方法は? (ID:89166)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
魔界の仮面弁士さん、ご回答サンプルありがとうございました。 いつも、初めて見るメソッドや使用法のはっきりわからなかったメソッドに感心感服しております。 さて、魔界の仮面弁士さんのサンプルを拝見し、自分なりに納得して以下の通りに改造してみたのですが、なかなかうまくいきません。 *********** ソース ************ Dim B() As Byte = {&H25, &H52, &H9A, &H44, &H16, &H42, &H21, &H2C} Dim test As TEST1_T Dim P As System.IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(GetType(TEST1_T))) Marshal.Copy(B, 0, P, B.Length) test = DirectCast(Marshal.PtrToStructure(P, GetType(TEST1_T)), TEST1_T) System.Runtime.InteropServices.Marshal.FreeHGlobal(P) Trace.WriteLine(String.Format("{0}(0x{0:x}),{1}(0x{1:x}),{2}(0x{2:x}),{3}(0x{3:x})", _ test.test1_1, test.test1_2, test.test1_3, test.test1_4)) ---------------------------------------- Structure TEST1_T Dim test1_1 As Short Dim test1_2 As Integer Dim test1_3 As Byte Dim test1_4 As Byte End Structure 改造といっても、構造体のフォーマットを、いままで全てshortだったのを ShortやIntegerを織り交ぜただけですが… そして、これで得られる値が… test1_1=[0x5225] test1_2=[0x4216449a] test1_3=[0x21] test1_4=[0x2c] と思っていたのですが、実際は… test1_1=[0x5225] test1_2=[0x2c214216] test1_3=[0xb4] test1_4=[0x6d] となってしまいました。 なぜかtest1_1とtest1_2の間に2Byteの空きが出てしまいます。(test1_3,test1_4は領域外を見ているのでしょうか?) いろいろと調べいているつもりですが、原因・対策・打開策がみつかりません。 原因など、ご存知でしょうか?
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.