1234567891011121314151617181920212223242526272829303132 |
- using System;
- using System.IO;
- namespace SharpCompress.Compressors.Xz
- {
- internal static class MultiByteIntegers
- {
- public static ulong ReadXZInteger(this BinaryReader reader, int MaxBytes = 9)
- {
- if (MaxBytes <= 0)
- throw new ArgumentOutOfRangeException();
- if (MaxBytes > 9)
- MaxBytes = 9;
- byte LastByte = reader.ReadByte();
- ulong Output = (ulong)LastByte & 0x7F;
- int i = 0;
- while ((LastByte & 0x80) != 0)
- {
- if (++i >= MaxBytes)
- throw new InvalidDataException();
- LastByte = reader.ReadByte();
- if (LastByte == 0)
- throw new InvalidDataException();
- Output |= ((ulong)(LastByte & 0x7F)) << (i * 7);
- }
- return Output;
- }
- }
- }
|