public Packet(ReadOnlySpan <byte> bf) { if (bf.Length < HeaderSize) { throw new IndexOutOfRangeException(); } int packetSize = 0; fixed(byte *pinnedBuffer = &MemoryMarshal.GetReference(bf)) packetSize = CalculatePacketSize(pinnedBuffer); if (packetSize < HeaderSize) { throw new IndexOutOfRangeException(); } buffPtr = (byte *)Marshal.AllocHGlobal(packetSize); fixed(byte *pinnedBuffer = &MemoryMarshal.GetReference(bf)) Buffer.MemoryCopy(pinnedBuffer, buffPtr, packetSize, packetSize); _pHeader = *(packetHeader *)(buffPtr); Seek(0, SeekOrigin.Begin); }
public Packet(packetHeader header) { _pHeader = header; int packetSize = Size; if (packetSize < HeaderSize) { throw new IndexOutOfRangeException(); } buffPtr = (byte *)Marshal.AllocHGlobal(packetSize); new Span <byte>(buffPtr, packetSize).Fill(0); *(packetHeader *)(buffPtr) = _pHeader; Seek(0, SeekOrigin.Begin); }
public Packet(byte[] bf) { if (bf.Length < HeaderSize) { throw new IndexOutOfRangeException(); } int packetLenght = 0; fixed(byte *pinnedBuffer = bf) packetLenght = CalculatePacketSize(pinnedBuffer); if (packetLenght < HeaderSize) { throw new IndexOutOfRangeException(); } buffPtr = (byte *)Marshal.AllocHGlobal(packetLenght); Marshal.Copy(bf, 0, (IntPtr)buffPtr, packetLenght); _pHeader = *(packetHeader *)(buffPtr); Seek(0, SeekOrigin.Begin); }