[StructLayout(LayoutKind.Explicit)]
public struct struct1
{
[FieldOffset(0)]
public byte a; // 1 byte
[FieldOffset(1)]
public int b; // 4 bytes
[FieldOffset(5)]
public short c; // 2 bytes
[FieldOffset(7)]
public byte buffer;
[FieldOffset(18)]
public byte[] shaHashResult; // 20 bytes
}
void DoStuff()
{
struct1 myTest = new struct1();
myTest.shaHashResult = sha256.ComputeHash(pkBytes); // 20 bytes
byte[] newParameter = myTest.ToArray() //<-- How do I convert a struct
// to array without a copy?
}
How do I take the array myTest
and convert it to a byte[]? Since my objects will be large, I don't want to copy the array (memcopy, etc)
Since you have a big array, this is really the only way you will be able to do what you want:
This code is very efficient, and even in a tight loop, the results of
ComputeHash
will be collected in a quick Gen0 collection, whilemyBigArray
will be on the Large Object Heap, and not moved or collected. TheBuffer.BlockCopy
is highly optimized in the runtime, yielding the fastest copy you could probably achieve, even in the face of pinning the target, and using an unrolled pointer copy.