public static byte[] encode(Packet packet) { byte[] packetId = BitConverter.GetBytes(packet.id); byte[] encodedPacket = packet.encode(); UInt32 packetLength = Convert.ToUInt32(packetId.Length + encodedPacket.Length); byte[] packetLengthData = BitConverter.GetBytes(packetLength); byte[] output = new byte[packetLengthData.Length + packetId.Length + encodedPacket.Length]; //Endianess flipping Array.Reverse(packetId); Array.Reverse(packetLengthData); System.Buffer.BlockCopy(packetLengthData, 0, output, 0, packetLengthData.Length); System.Buffer.BlockCopy(packetId, 0, output, packetLengthData.Length, packetId.Length); System.Buffer.BlockCopy(encodedPacket, 0, output, packetLengthData.Length + packetId.Length, encodedPacket.Length); return(output); }