I want to use my laptop to communicate with MES(Manufacturing Execution System). And when I serialized the data (struct type), something happen. The code below is what I have done:
[StructLayout(LayoutKind.Sequential, Pack = 4)]
struct DataPackage
{
    public int a;
    public ushort b;
    public byte c;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 5)] public string d;
}
class Program
{
    static void Main(string[] args)
    {
        DataPackage pack1 = new DataPackage();
        pack1.a = 0x33333301;
        pack1.b = 200;
        pack1.c = 21;
        pack1.d = "hello";
        byte[] pack1_serialized = getBytes(pack1);
        Console.WriteLine(BitConverter.ToString(pack1_serialized));
        byte[] getBytes(DataPackage str)
        {
            int size = Marshal.SizeOf(str);
            byte[] arr = new byte[size];
            IntPtr ptr = Marshal.AllocHGlobal(size);
            Marshal.StructureToPtr(str, ptr, true);
            Marshal.Copy(ptr, arr, 0, size);
            Marshal.FreeHGlobal(ptr);
            return arr;
        }
    }
}
I want the outcome to be like this:
33-33-33-01-00-C8-15-68-65-6C-6C-6F
So the questions are:
- Why is the uint / ushort type data reverse after Marshalling?
 - Is there any other way that I can send the data in the sequence that I want ?
 - Why is the last word "o" in string "hello" disappear in the byte array ?
 
Thanks.
