Из битов в двоичное представление числа - C#
Формулировка задачи:
У меня есть класс для работы с битовыми массивами. Не получается сделать метод для перевода из бинарной в десятичную системы (необходимо найти значение числа, соответствующего 4 младшим байтам).
Конструкторы класса:
Есть индексатор:
Как я пытался сделать метод:
// программа зависает, цикл плохой
private byte[] _core;
public Bits()
{
_core = new byte[1];
}
public Bits(int bytesCount)
{
_core = new byte[bytesCount];
}
public Bits(byte[] bytes)
{
if (bytes == null) throw new ArgumentNullException("bytes");
_core = bytes;
} public byte this[int i]
{
get { return _core[i]; }
set { _core[i] = value; }
}static public int Value32(Bits bits)
{
int _decimal = 0;
while (bits.Length / 8 < 5)
{
for(int i = 0;i < bits.Length;i++)
{
int multiplier = 1;
for (int j = bits.Length - 1; j >= 0; j--)
{
int t = System.Convert.ToInt16(bits[i].ToString());
_decimal = _decimal + (t * multiplier);
multiplier = multiplier * 2;
}
}
}
return _decimal;
}Решение задачи: «Из битов в двоичное представление числа»
textual
Листинг программы
static public int Value32(Bits bits)
{
// не забываем что байты хранятся в памяти в LittleEndian
// менее значимые цифры идут по младшим адресам, более значимые - по старшим
short lowVal = BitConverter.ToInt16(new[]{ bits[0], bits[1] },0);
short highVal = BitConverter.ToInt16(new[] {bits[2], bits[3]},0);
// складываем
return (Int32)(lowVal | (highVal << 16));
}