如何将短片转换为布尔[]?

时间:2018-04-24 00:34:09

标签: c#

如何在C#中将短片转换为布尔数组(bool [])?我正在寻找一种算法,多种选择将受到赞赏。

例如,如果我有一个短的= 132,即二进制的10000100

所以我想要一个{false,false,true,false,false,false,false,true}数组

bool[] ToArrayOfBool(short source)
{
    bool[] result = new bool[16];

    ///Do Some stuff here


    return result;
}

6 个答案:

答案 0 :(得分:5)

您可以使用BitArray class

byte input = 132;
var bits = new BitArray(new byte[] { input });
foreach (var b in bits)
{
    Console.WriteLine(b);
}

这会生成IEnumerable<bool>,但您也可以将其转换为数组:

byte input = 132;
var bits = new BitArray(new byte[] { input }).Cast<bool>().ToArray();
foreach (var b in bits)
{
    Console.WriteLine(b);
}

输出:

False
False
True
False
False
False
False
True

您也可以将其保留为short,并使用类似这样的扩展方法获取您需要的位:

public static bool GetBit(this short This, int bitNumber)
{
    return (This & (1 << bitNumber)) != 0;
}

for (int i=0; i<8; i++)
{
    Console.WriteLine(input.GetBit(i));
}

Example on DotNetFiddle

答案 1 :(得分:2)

using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            Console.WriteLine($"132 = {string.Join(",", ConvertToArray(132))}");
            Console.ReadKey();
        }

        static bool[] ConvertToArray(short @short)
        {
            var result = new bool[16];
            for (int i = 0; i < 16; i++)
            {
                result[i] = (@short & (short)1) == (short)1 ? true : false;
                @short = (short)(@short >> 1);
            }
            return result;
        }

    }
}

答案 2 :(得分:1)

for (int i = 0; i < 16; i++) {
    // Single bit bitmask at index i: 0b0001, 0b0010, 0b0100 etc..
    int bitmask = 1 << i;
    // Check to see if the bit at that mask is set.
    result[i] = (source & bitmask) != 0;
}

答案 3 :(得分:0)

线索

var bits = new bool[16];
if(i &x0001) bits[0] = true;
if(i &x0002) bits[1] = true;

答案 4 :(得分:0)

看起来你有三个步骤:

  1. 首先使用Convert.ToString(myshort, 2)转换为二进制文件,其中myshort是您的值。

  2. 循环遍历字符串的每个字符并测试它是否等于1并将每个字符添加到bool数组。

  3. 反转数组(或者您可以在步骤1之后反转字符串)

  4. 因为我很无聊,这里有一个例子:)

        short myshort = 132;
        Console.WriteLine("Short: " + myshort);
    
        var binarystring = Convert.ToString(myshort, 2);
        Console.WriteLine("Binary: " + binarystring);
    
        var boolarray = new bool[binarystring.Length];
    
        for (var i = 0; i < binarystring.Length; i++) {
            boolarray[i] = binarystring[i] == '1';          
        }
    
        Array.Reverse(boolarray);
    
        //output result     
        foreach (var b in boolarray) {
            Console.Write(b.ToString() + ", ");
        }
    

    输出结果为:

    Short: 132
    Binary: 10000100
    False, False, True, False, False, False, False, True,
    

答案 5 :(得分:0)

非常感谢@ pm100这就是我想出来的

public bool[] ToArrayOfBool(short source)
{
    bool[] result = new bool[16];

    for (int i = 0; i < 16; i++)
    {
        result[i] = (source & (i * i)) == i * i; 
    }

    return result;
}