Я нашел - казалось бы - более элегантный и по какой-то причине более быстрый способ сделать это:
byte[] rawData = new byte[1024];
GCHandle rawDataHandle = GCHandle.Alloc(rawData, GCHandleType.Pinned);
int* iPtr = (int*)rawDataHandle.AddrOfPinnedObject().ToPointer();
int length = rawData.Length / sizeof (int);
for (int idx = 0; idx < length; idx++, iPtr++)
{
(*iPtr) = idx;
Console.WriteLine("Value of integer at pointer position: {0}", (*iPtr));
}
rawDataHandle.Free();
Таким образом, единственное, что мне нужно сделать - кроме установки правильной длины итерации - это увеличить указатель. Я сравнил код с кодом, использующим оператор fixed, и этот код немного быстрее.