Is there a relatively painless method for converting the contents of a
structure into a byte array and back again?
I have been using Marshal to do this, but it is a pain! To get the byte
array I have to Marshal.StructureToPtr() and then use Marshal.ReadByte()
to extract each of the bytes into an array individually. The reverse is
just as painful.
Is there no general purpose (safe) mechanism for achieving the same thing?
-ken
Mattias Sjögren - 09 Mar 2006 19:37 GMT
Ken,
>and then use Marshal.ReadByte()
>to extract each of the bytes into an array individually.
You can use Marshal.Copy to get them all at once.
Mattias

Signature
Mattias Sjögren [C# MVP] mattias @ mvps.org
http://www.msjogren.net/dotnet/ | http://www.dotnetinterop.com
Please reply only to the newsgroup.
Stuart Irving - 15 Mar 2006 17:42 GMT
try this:
MemoryStream ms = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms, myStruct);
return ms.ToArray();
> Is there a relatively painless method for converting the contents of a
> structure into a byte array and back again?
[quoted text clipped - 7 lines]
>
> -ken
Peter Bromley - 15 Mar 2006 22:38 GMT
> Is there a relatively painless method for converting the contents of a
> structure into a byte array and back again?
[quoted text clipped - 7 lines]
>
> -ken
Well, as long as you are unconcerned with endian, versioning, or struct
layout issues, this C++ code below might help:
__value struct MyStruct
{
...
};
...
MyStruct myStruct;
...
// copy to Byte array
System::Byte dstBuffer __gc[] = new System::Byte[sizeof(MyStruct)];
System::Byte __pin* dstP = &dstBuffer[0];
*((MyStruct*)(void*)dstP) = myStruct;
...
// copy from byte array (srcBuffer)
System::Byte __pin* srcP = &srcBuffer[0];
MyStruct myStruct = *((MyStruct*)(void*)srcP);
I know it looks ugly but it does work assuming the constraints I
mentioned above.
Cheers, Peter