将32个bool值的集合转换为32位整数

时间:2016-01-30 00:15:22

标签: c# type-conversion modbus modbus-tcp

所以我是C#的新手,我已经搜索了但我只是不知道我在寻找什么。

我有一个名为inputs的布尔变量,它从ModBus接口库中保存了32个真/假位。

这是一张解释我的32个真/假值的图像。基本上那些存储在输入中的32个真/假值。我需要将它们整理成一个32位整数。

我想知道的是如何将这32个值整理成一个32位字符串,即(0000 0000 0000 1000 1000 1000 1000 1000),这显然是一个32位整数,并给出一个88888的十进制数。 / p>

而我现在只是被困住,因为我不确定它应该使用什么命令。

4 个答案:

答案 0 :(得分:3)

只是有点操纵:

uint i = 0;
var boolArr = new[] { true, false, true }; // 0b101
foreach (var bit in boolArr)
{
    // perform a bitwise left shift by 1 position
    // equivalent to multiplying i by 2
    i <<= 1;

    // store the bool value in the LSB of i
    i |= (uint)(bit ? 1 : 0);
}
Console.WriteLine(i);

将输出值5

或者单行:

val = Convert.ToUInt32(string.Join("",
          bools.Select(b => b ? 1 : 0)), 2);

答案 1 :(得分:0)

如果你想要更好的理解(詹姆斯似乎是正确的),请看看这个(你可以将粘贴复制到Linqpad,否则,删除Dump()个调用,并使用ToString()):

// Initialize variables
bool[] ba = new bool[24];
Random r = new Random();
StringBuilder sb = new StringBuilder();
Int32 i32 =0;

// Initialize array
for (int i = 0; i < ba.Length; i++)
{
    var d = r.Next(0,10);
    ba[i] = (d < 5) ? true : false;
}

// Dump to string: 
for (int i = 0; i < ba.Length; i++)
{
    sb.Append( ba[i] ? 1 : 0);
}

// Build your int
for (int i = 0; i < ba.Length; i++)
{
    // Shift left
    i32 = i32 << 1;
    // Add your current value
    i32+= ba[i] ? 1 : 0;
}

// Outputs
ba.Dump("array output");
sb.ToString().Dump("as a string");
i32.Dump("as an int");

以下内容也应该有所帮助:<< Operator (C# Reference)this question

答案 2 :(得分:0)

一旦你有一个以位为单位的字符串值,你只需要使用

转换该字符串
  int output = Convert.ToInt32(input, 2);

这里已经回答了。

Convert binary string into integer

答案 3 :(得分:0)

我认为这就是你想要的。 booleans将是你的bool数组,然后是ints,用bool数组的长度初始化(需要),因为它们是相同的。 i只是我们在foreach循环中使用的计数器。然后,您递增i并将数组中的一个bool值转换为整数,并将其保存在int数组中。最后一行连接所有整数。在示例中,知道True = 1和False = 0,您有TFTF,然后ints = 1, 0, 1, 0int result = 1010

                bool[] booleans = { true, false, true, false }; // Your bool array
                int[] ints = new int[booleans.Length];  // Integer equivalent of "booleans"
                int i = -1; // Counter for "foreach" loop
                foreach (bool boo in booleans)
                {
                    i++;
                    ints[i] = Convert.ToInt32(boo); // Convert boolean into binary
                }
                int result = Convert.ToInt32(string.Join("", ints)); // Concatenate them

我建议你做一个简短的C#课程,你会学到很多东西,不管怎样,我希望这是你想要的,如果你想要一个整数数组,只需删除最后一行。请下次在帖子中包含更多信息。