То, что я пытаюсь сделать, это разделить общее числовое значение байта 256 на их счетные части.
Мы знаем, что в двоичном виде:
0001 1111 is 31
0011 1111 is 63
0111 1111 is 127
1111 1111 is 255
Цель -сделать так, чтобы, если у меня есть сетка 5 на 5
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
, что дает мне всего 25 слотов.Каждый слот может иметь числовое значение от 0 до 31.Поэтому числовое значение «4294967295» будет равно 31 в каждом слоте, где «0» равно 0 в каждом слоте, поэтому я пытаюсь выяснить, как в C # можно сдвигать битовые значения.
, поэтому, если яиметь в моей сетке:
1 3 0 0 0
0 0 0 0 0
0 0 5 0 0
0 0 3 0 6
Первый слот будет битом от 1 до 4, от 0x0 до 0x1F
Второй слот будет битом 5, от 0x20 до 0x3F
3-й слот будет битом 6, 0x40до 0x5F
4-й слот будет бит 7, от 0x60 до 0x7F
5-й слот будет бит 8, от 0x80 до 0x9F
и т. д.
Как бы это сделать в C #.
Было бы 0-31 на слот, (256/8) = всего 8 слотов.
Теоретически я мог бы иметь максимум 32 слота в сетке 6x5 или 5x6, если быМне было нужно.Но сейчас мне просто нужно 5x5.
- отредактировано
byte[] values = new byte[]
{
25, 31, 31, 31, 31,
31, 31, 31, 31, 31,
31, 31, 31, 31, 31,
31, 31, 31, 31, 31,
31, 31, 31, 31, 31,
31, 31
};
Console.Clear();
uint number = 0;
for ( int i = 0; i < values.Length; i++ )
{
number |= (uint)(values[i] << i);
Console.WriteLine( number );
}
byte[] buffer = BitConverter.GetBytes( number );
for ( int i = 0; i < values.Length; i++ )
{
values[i] = (byte)((number >> i) & 0x1F);
}
Console.ReadLine();
Когда я сделал это, он дал мне 255, в буфере в каждом слоте, чтоЯ хотел ... Видимо, это то, к чему я стремлюсь.Даже если бы у меня было 8 дополнительных слотов, которые я мог бы использовать, но я просто проигнорирую их ...
Теперь следующая цель - разбить его на части из целого числа без знака.
Спасибо за всю помощь до сих пор в быстрой манере.
EDITED
Я изменил его обратно, по-видимому, я могу иметь только до 28 частей
Теперь у меня проблема с преобразованием обратно в их части.Сейчас он не сдвигается так, как мне бы хотелось, он устанавливает для них все 31, тогда как первый должен быть 25 в соответствии с массивом.