3

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

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

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

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

我现在只是卡住了,因为我不确定我应该使用什么命令。

4

4 回答 4

5

只是一些操作:

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);
于 2016-01-30T00:35:46.673 回答
0

我想这就是你想要的。booleans将是你的 bool 数组,然后ints,用 bool 数组的长度初始化(需要),因为它是相同的。i只是我们在 foreach 循环中使用的计数器。i然后,将数组中的一个 bool 值递增并将其转换为整数,并将其保存在 int 数组中。最后一行连接所有整数。在示例中,知道 True = 1 和 False = 0,您有 TFTF,然后,ints = 1, 0, 1, 0并且int 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# 课程,你会学到很多东西,无论如何,我希望这是你想要的,如果你想要一个整数数组,只需删除最后一行。请下次,在帖子中包含更多信息。

于 2016-01-30T00:58:44.933 回答
0

如果您想更好地理解(James 似乎是正确的),请看一下(您可以将粘贴复制到 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

于 2016-01-30T00:53:29.490 回答
0

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

  int output = Convert.ToInt32(input, 2);

这里已经回答了。

将二进制字符串转换为整数

于 2016-01-30T00:55:01.760 回答