public static void Write(ref byte[] bytes, ref int offset, uint value)
        {
            var cc = new UIntUnion {
                Value = value
            };

            Write(ref bytes, ref offset, cc.byte0);
            Write(ref bytes, ref offset, cc.byte1);
            Write(ref bytes, ref offset, cc.byte2);
            Write(ref bytes, ref offset, cc.byte3);
        }
Exemplo n.º 2
0
        public static uint ReadUInt32(this ReadOnlySequence <byte> sequence, long start, bool isBigEndian)
        {
            if (sequence.Length < 4 + start)
            {
                throw new ArgumentOutOfRangeException(nameof(start), start, "Sequence must be at least 4 bytes long from 'start' to end");
            }

            var reverse = isBigEndian != BitConverter.IsLittleEndian;
            var union   = new UIntUnion();
            var read    = 0;

            foreach (var memory in sequence)
            {
                if (start > memory.Length)
                {
                    start -= memory.Length;
                    continue;
                }

                var span = memory.Span;

                for (var i = (int)start; i < span.Length; ++i, ++read)
                {
                    switch (read)
                    {
                    case 0:
                        if (reverse)
                        {
                            union.B0 = span[i];
                        }
                        else
                        {
                            union.B3 = span[i];
                        }
                        continue;

                    case 1:
                        if (reverse)
                        {
                            union.B1 = span[i];
                        }
                        else
                        {
                            union.B2 = span[i];
                        }
                        continue;

                    case 2:
                        if (reverse)
                        {
                            union.B2 = span[i];
                        }
                        else
                        {
                            union.B1 = span[i];
                        }
                        continue;

                    case 3:
                        if (reverse)
                        {
                            union.B3 = span[i];
                        }
                        else
                        {
                            union.B0 = span[i];
                        }
                        break;
                    }
                }

                if (read == 3)
                {
                    break;
                }

                start = 0;
            }

            return(union.UInt);
        }