Beispiel #1
0
        public static object ReadStruct(this BitsReader bitsReader, Type structType, BinarySize size, Endianness endianness)
        {
            if (structType == null)
            {
                throw new ArgumentNullException("structType");
            }
            byte[] readBuffer = bitsReader.ReadBits(size, endianness);
            if (readBuffer.Length > 1 && !endianness.MatchesMachineEndianness())
            {
                Debug.WriteLine("Endianness mismatch. Reversing bytes...");
                Array.Reverse(readBuffer);
                Debug.WriteLine(string.Concat("Bytes: ", readBuffer.ToCsvString()));
            }
            GCHandle handle    = GCHandle.Alloc(readBuffer, GCHandleType.Pinned);
            var      structure = Marshal.PtrToStructure(handle.AddrOfPinnedObject(), structType);

            handle.Free();
            return(structure);
        }