[英]Unsafe Int32 pointer to a Byte[] array
我有一個字節數組,我想通過Int32指針訪問(不安全的上下文)。 我這樣做
byte[] bgImageBytes = new byte[1000];
unsafe
{
fixed (byte* bgImgPtr = bgImageBytes)
{
// I have a byte pointer ... How can I get an Int32 pointer?
}
}
我已經將從kernel32.dll返回的指針作為Byte和Int32指針訪問,沒有任何問題。 但是當我嘗試在托管字節數組上創建一個Int32指針時(上面的示例),它似乎抱怨它是托管代碼,所以它不起作用。
簡單地做UInt32* bgImgIntPtr = (UInt32*)bgImgPtr;
導致MDA FatalExecutionEngineError: CLR已被致命損壞。 這通常是由數據損壞引起的,數據損壞可能是由許多問題引起的,例如調用格式錯誤的平台調用函數以及將無效數據傳遞給CLR。
我的目標:將UInt32和Byte指針都指向一個bytearray,這樣我就可以將Kinect“熱圖”作為整數和單獨顏色讀取。 我知道我可以輕松地在類型之間進行轉換,但由於我正在使用不同格式的多個數組,如果我可以直接訪問它們而不必一直在它們之間進行轉換會更好。 有很多簡單的復制正在進行,所以它只會增加開銷以保持轉換。
好的,有趣的故事。 事實證明,它不僅可以引用空數組,而且還指向某個地方。 這真的搞砸了我的調試。
“UInt32 * bgImgIntPtr =(UInt32 *)bgImgPtr;” 導致MDA異常的原因是陣列未初始化。 制作一個指向bytearray的字節指針的指針是正確的方法。
答案:
byte[] bgImageBytes = new byte[1000];
unsafe
{
// Make a byte pointer to the byte array
fixed (byte* bgImgPtr = bgImageBytes) {
// Make a UInt32 pointer to the byte pointer
UInt32* bgImgIntPtr = (UInt32*)bgImgPtr;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.