【发布时间】:2012-12-17 22:34:20
【问题描述】:
[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 并将其转换为字节[]?由于我的对象会很大,我不想复制数组(memcopy 等)
【问题讨论】:
-
@SLaks 我发现了这个但没有推论:
System.Runtime.InteropServices.Marshal.StructureToPtr -
如果您想避免复制,您可能需要将其更改为
class。 -
您分配的字节数组只是一个指针。它不是内联的。
-
@codekaizen 有一个非常重要的观点。 shaHashResult 数组中的字节不在结构中。它们在堆中的某个地方。该结构只有对数组对象的引用。
-
叹息......当我想出使用 stuct 和/或 Marshal 时,我以为我走在了一个很好的轨道上
标签: c# arrays struct bytearray unsafe