using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
[StructLayout(LayoutKind.Sequential)]
[Serializable]
public struct Quaternion
{
public char[] bone0;
public char[] bone1;
public Int16 qw;
public Int16 qx;
public Int16 qy;
public Int16 qz;
public override string ToString()
{
return $"{qw} {qx} {qy} {qz}";
}
}
class Program
{
private static byte[] Serialize<T>(T obj)
{
IFormatter formatter = new BinaryFormatter();
using (MemoryStream stream = new MemoryStream())
{
formatter.Serialize(stream, obj);
return stream.ToArray();
}
}
private static T Deserialize<T>(byte[] param)
{
using (MemoryStream ms = new MemoryStream(param))
{
IFormatter br = new BinaryFormatter();
return (T)br.Deserialize(ms);
}
}
static void Main(string[] args)
{
var bytes = Serialize(new Quaternion { qw = 1, qx = 2, qy = 3, qz = 4 });
var obj = Deserialize<Quaternion>(bytes);
Console.WriteLine(obj);
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uSU87CnVzaW5nIFN5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlczsKdXNpbmcgU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbjsKdXNpbmcgU3lzdGVtLlJ1bnRpbWUuU2VyaWFsaXphdGlvbi5Gb3JtYXR0ZXJzLkJpbmFyeTsKCltTdHJ1Y3RMYXlvdXQoTGF5b3V0S2luZC5TZXF1ZW50aWFsKV0KW1NlcmlhbGl6YWJsZV0KcHVibGljIHN0cnVjdCBRdWF0ZXJuaW9uCnsKICAgIHB1YmxpYyBjaGFyW10gYm9uZTA7CiAgICBwdWJsaWMgY2hhcltdIGJvbmUxOwogICAgcHVibGljIEludDE2IHF3OwogICAgcHVibGljIEludDE2IHF4OwogICAgcHVibGljIEludDE2IHF5OwogICAgcHVibGljIEludDE2IHF6OwoKICAgIHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKQogICAgewogICAgICAgIHJldHVybiAkIntxd30ge3F4fSB7cXl9IHtxen0iOwogICAgfQp9CgoKY2xhc3MgUHJvZ3JhbQp7CiAgICBwcml2YXRlIHN0YXRpYyBieXRlW10gU2VyaWFsaXplPFQ+KFQgb2JqKQogICAgewoKICAgICAgICBJRm9ybWF0dGVyIGZvcm1hdHRlciA9IG5ldyBCaW5hcnlGb3JtYXR0ZXIoKTsKICAgICAgICB1c2luZyAoTWVtb3J5U3RyZWFtIHN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKSkKICAgICAgICB7CiAgICAgICAgICAgIGZvcm1hdHRlci5TZXJpYWxpemUoc3RyZWFtLCBvYmopOwogICAgICAgICAgICByZXR1cm4gc3RyZWFtLlRvQXJyYXkoKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgVCBEZXNlcmlhbGl6ZTxUPihieXRlW10gcGFyYW0pCiAgICB7CiAgICAgICAgdXNpbmcgKE1lbW9yeVN0cmVhbSBtcyA9IG5ldyBNZW1vcnlTdHJlYW0ocGFyYW0pKQogICAgICAgIHsKICAgICAgICAgICAgSUZvcm1hdHRlciBiciA9IG5ldyBCaW5hcnlGb3JtYXR0ZXIoKTsKICAgICAgICAgICAgcmV0dXJuIChUKWJyLkRlc2VyaWFsaXplKG1zKTsKICAgICAgICB9CiAgICB9CiAgICBzdGF0aWMgdm9pZCBNYWluKHN0cmluZ1tdIGFyZ3MpCiAgICB7CiAgICAgICAgdmFyIGJ5dGVzID0gU2VyaWFsaXplKG5ldyBRdWF0ZXJuaW9uIHsgcXcgPSAxLCBxeCA9IDIsIHF5ID0gMywgcXogPSA0IH0pOwogICAgICAgIHZhciBvYmogPSBEZXNlcmlhbGl6ZTxRdWF0ZXJuaW9uPihieXRlcyk7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUob2JqKTsKICAgIH0KfQoK