簡體   English   中英

如何將字節數組封送給結構?

[英]How do I marshal an array of bytes to a struct?

相關問題

在相關的問題中,我試圖找出最快的方法。 我在該問題中選擇的方法已成為我的瓶頸。 我正在從文件中讀取一些二進制數據,需要將其放入托管結構定義中。 沒有涉及非托管代碼,因此我認為有比分配GCHandle更好的方法。

有沒有辦法將字節數組轉換為相同大小的結構?

我有這樣的方法:

static public T ReadStructure<T>(byte[] bytes)
    where T : struct
{
    int len = Marshal.SizeOf(typeof(T));
    IntPtr i = Marshal.AllocHGlobal(len);

    try
    {
        Marshal.Copy(bytes, 0, i, len);
        return (T)Marshal.PtrToStructure(i, typeof(T));
    }
    finally
    {
        Marshal.FreeHGlobal(i);
    }
}

誠然,這不是很快-但就我而言,並不需要如此。 這是您當前的解決方案,並且發現分配/復制/釋放開銷太慢了嗎?

您可以查看以下代碼:


struct Foo
{
  public int x;
}

public unsafe static void Main()
{
  byte[] x = new byte[] { 1, 1, 0, 0 };
  Foo f;

  fixed (byte* xPtr = x)
  {
    f = *((Fpp*)xPtr);
  }

  Console.WriteLine(f.x);
}

這絕對不安全的,如果結構包含一些更復雜的類型,您可能會遇到問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM