如何将 uint 转换为 bool 数组?
How to convert uint to bool array?
例如
uint <- 1
我想得到
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
如果
uint <- 8
明白了
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
只是一点点格式化,怎么办?
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
uint x = 1;
List<bool> result = new List<bool>();
for(int i = 0; i < 32; ++i)
{
bool isBitSet = ((x >> i) & 0x01) > 0;
result.Add(isBitSet);
}
}
}
请注意,这将首先推送 lsbit。
您可以为此尝试 Linq:
using System.Linq;
...
uint source = 8;
int[] result = Enumerable
.Range(0, sizeof(uint) * 8)
.Reverse()
.Select(i => (source & (1 << i)) == 0 ? 0 : 1)
.ToArray();
Console.Write(string.Join(" ", result));
结果:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
如果要bool[] result
查询即可
bool[] result = Enumerable
.Range(0, sizeof(uint) * 8)
.Reverse()
.Select(i => (source & (1 << i)) != 0)
.ToArray();
还有一个选项:
使用 Convert.ToString(Int64, Int32)
to create the binary representation of the uint
value (a built in implicit conversion from UInt32
to Int64
存在,所以没有问题)。
然后使用字符串的 PadLeft(int, char)
添加前导零
然后使用 Select
将字符转换为布尔值 - 最后,ToArray()
:
static bool[] To32WithSpaces(uint number)
{
return Convert.ToString(number, 2)
.PadLeft(32, '0')
.Select(c => c=='1')
.ToArray();
}
您可以在 rextester
上观看现场演示
例如
uint <- 1
我想得到
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
如果
uint <- 8
明白了
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
只是一点点格式化,怎么办?
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
uint x = 1;
List<bool> result = new List<bool>();
for(int i = 0; i < 32; ++i)
{
bool isBitSet = ((x >> i) & 0x01) > 0;
result.Add(isBitSet);
}
}
}
请注意,这将首先推送 lsbit。
您可以为此尝试 Linq:
using System.Linq;
...
uint source = 8;
int[] result = Enumerable
.Range(0, sizeof(uint) * 8)
.Reverse()
.Select(i => (source & (1 << i)) == 0 ? 0 : 1)
.ToArray();
Console.Write(string.Join(" ", result));
结果:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
如果要bool[] result
查询即可
bool[] result = Enumerable
.Range(0, sizeof(uint) * 8)
.Reverse()
.Select(i => (source & (1 << i)) != 0)
.ToArray();
还有一个选项:
使用 Convert.ToString(Int64, Int32)
to create the binary representation of the uint
value (a built in implicit conversion from UInt32
to Int64
存在,所以没有问题)。
然后使用字符串的 PadLeft(int, char)
添加前导零
然后使用 Select
将字符转换为布尔值 - 最后,ToArray()
:
static bool[] To32WithSpaces(uint number)
{
return Convert.ToString(number, 2)
.PadLeft(32, '0')
.Select(c => c=='1')
.ToArray();
}
您可以在 rextester
上观看现场演示