- Код: Выделить всё
internal uint ReadCUInt32()
{
byte code = ReadByte();
switch (code & 0xE0)
{
case 0xE0:
return BitConverter.ToUInt32(ReadArray(4, true), 0);
case 0xC0:
byte[] bt = ReadArray(3, true);
return BitConverter.ToUInt32(new byte[] { bt[2], bt[1], bt[0], code }, 0) & 0x1FFFFFFF;
case 0x80:
case 0xA0:
return (uint)(BitConverter.ToUInt16(new byte[] { ReadByte(), code }, 0) & 0x3FFF);
}
return (uint)code;
}
internal DataStream WriteCUInt32(uint value)
{
if (value <= 0x7F)
{
WriteByte((byte)value);
return this;
}
if (value <= 0x3FFF)
{
byte[] bt = BitConverter.GetBytes((ushort)(value + 0x8000));
WriteArray(bt, true);
return this;
}
if (value <= 0x1FFFFFFF)
{
byte[] bt = BitConverter.GetBytes((uint)(value + 0xC0000000));
WriteArray(bt, true);
return this;
}
if (value <= 0xFFFFFFFF)
{
List<byte> bt = new List<byte>();
bt.Add(0xE0);
byte[] arrbt = BitConverter.GetBytes((uint)value);
bt.AddRange(arrbt);
WriteArray(bt.ToArray(), true);
return this;
}
return this;
}
Как читать 1-2 байтовые я разобрался. В примере чтение из потока происходит, а у меня массив . Хотелось бы получить советы/формулы по нахождению 3-5 байтовых.