我想要做的是将一个字节的总数值256分配到它们的计数器部分。将32位字节拆分为对应部分
我们所知道的是,在二进制:
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的
第四时隙是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件
我现在已经是转换回他们的部分问题。现在它不按我想要的方式转移,根据阵列,第一个应该是25时,它将它们全部设置为31。
6 * 6虽然是36? – 2011-06-03 02:14:07
我的不好耶你的权利。我的目标是让我可以做一个5乘5的网格,总共最多32位。真的,我只需要25个。 – Benjamin 2011-06-03 02:17:49
尽管我注释到只有5x5的概念,但它仍然在缓冲区中的255,255,255,255。这应该是不正确的 – Benjamin 2011-06-03 02:33:40