如何将 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

上观看现场演示