i have created a structure like bellow :
[StructLayout(LayoutKind.Explicit, Pack = 1)]
    public class NodRecord
    {
        [FieldOffset(0)]
        public ushort Driver;
        [FieldOffset(2)]
        public ushort BaudRate;
        [FieldOffset(4)]
        public ushort EnquiryInterval;
        [FieldOffset(6)]
        public byte Protocol;
        [FieldOffset(7)]
        public ushort Delay;
        [FieldOffset(9)]
        public NodIPAddress IP_Addr_Other;
        [FieldOffset(13)]
        public ushort IP_Port_Other;
        [FieldOffset(15)]
        public ushort IP_Port_Own;
        [FieldOffset(17)]
        public ushort Application;
    }
then i have read it with code bellow:
 readBuffer = reader.ReadBytes(sizeType);
 handle = GCHandle.Alloc(readBuffer, GCHandleType.Pinned);
 nodes = (NodRecord)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(NodRecord));
 handle.Free();
I wonderd in x86 ,x64 and cortex arm processors everything is ok but on Atmel ARM9 AT91SAM9G20 for ushort variables i got wrong values, for example first and third next bytes values replace instead of  first and second next bytes, but for byte values everything is ok