2017-10-06 34 views
1

我有一個方法,它需要一個類型並將其轉換爲一個字節數組。但由於某些原因,字節數組結果在每個索引中總是以0結尾。元數據複製結構到字節數組出現爲0爲每個字節

我不知道爲什麼會發生這種情況,我傳遞了自己的結構,它具有值集,我正在檢查它,所以我不應該爲每個索引獲得0。

這是我的方法轉換爲字節數組:

public static bool TryGetBytes<T>(T obj, ref byte[] arr) 
    { 
     int size = Marshal.SizeOf(obj); 
     if (size > arr.Length) 
     { 
      Debug.Log("Size error!" + size + " : "+arr.Length); 
      return false; 
     } 

     IntPtr ptr = Marshal.AllocHGlobal(size); 
     Marshal.StructureToPtr(obj, ptr, true); 
     Marshal.Copy(ptr, arr, size, 0); 
     Marshal.FreeHGlobal(ptr); 
     return true; 
    } 

有什麼我可能是錯在這裏做什麼?我需要ref嗎?我嘗試沒有ref,並沒有發生任何差異。所以我有點困惑如何讓這個工作。

+1

你一定需要'ref',否則你在你的函數裏面做的工作在arr上的東西將在本地副本上工作並且不會導致在函數完成後的任何更改中。 –

+0

好的,謝謝澄清那部分:)我認爲可能是這種情況。 – Sir

+0

不應該是 - Marshal.Copy(ptr,arr,0,size)...? – MineR

回答

2

您在使用Marshal.Copy的錯誤: https://msdn.microsoft.com/en-us/library/ms146631(v=vs.110).aspx

public static void Copy(
    IntPtr source, 
    byte[] destination, 
    int startIndex, 
    int length 
) 

你已經有了逆轉的開始索引和長度。我猜它不會拋出異常,因爲長度是0.

+0

固定它的是,愚蠢的錯誤!想想我需要休息一下!謝謝 ! – Sir