私は次のような構造を作成しました:
[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;
}
それから私は以下のコードでそれを読みました:
readBuffer = reader.ReadBytes(sizeType);
handle = GCHandle.Alloc(readBuffer, GCHandleType.Pinned);
nodes = (NodRecord)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(NodRecord));
handle.Free();
x86、x64、およびcortex armプロセッサではすべて問題ないのだろうかと思いますが、Atmel ARM9 AT91SAM9G20では、ushort
変数の値が間違っています。たとえば、次の1番目と2番目のバイトの代わりに、次の1番目と3番目のバイトの値が置き換えられますが、バイト値の場合はすべて問題ありません。