[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?
}
如何获取数组myTest
并将其转换为byte []?由于我的对象很大,我不想复制数组(memcopy等)
答案 0 :(得分:0)
由于你有一个大阵列,这是你能够做你想做的唯一方法:
var myBigArray = new Byte[100000];
// ...
var offset = 0;
var hash = sha256.ComputeHash(pkBytes);
Buffer.BlockCopy(myBigArray, offset, hash, 0, hash.Length);
// if you are in a loop, do something like this
offset += hash.Length;
此代码非常高效,即使在紧密循环中,ComputeHash
的结果也会收集在快速Gen0集合中,而myBigArray
将在大对象堆上,而不会被移动或收集。 Buffer.BlockCopy
在运行时进行了高度优化,即使在固定目标和使用展开的指针副本的情况下,也可以获得最快的副本。