我有一个字节数组,我想通过Int32指针(不安全的上下文)访问。我这样做不安全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中返回两者字节和指针的Int32没有任何问题的指针。但是当我尝试在托管字节数组上创建一个Int32指针(上面的例子)时,它似乎抱怨它是托管的代码,所以它不起作用。
只要做UInt32* bgImgIntPtr = (UInt32*)bgImgPtr;
导致MDA FatalExecutionEngineError:该CLR已致命地损坏。这通常是由数据损坏引起的,这可能是由许多问题引起的,例如调用格式错误的平台调用函数以及将无效数据传递给CLR。
我的目标:将UInt32和Byte指针都指向单个字节阵列,这样我就可以读取整数和单独颜色的Kinect“热图”。我知道我可以很容易地在类型之间进行转换,但是由于我使用不同格式的多个数组,因此如果我可以直接访问它们而不必在它们之间进行转换,那将会更好。有很多简单的复制进行,所以它只会增加开销,继续转换。
是bgImageBytes实际上`新的字节[1000]`?还是被传递给非托管代码? – Marlon 2011-01-30 13:16:01