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); }
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); }