所以我是C#的新手,我已经搜索了但我只是不知道我在寻找什么。
我有一个名为inputs的布尔变量,它从ModBus接口库中保存了32个真/假位。
这是一张解释我的32个真/假值的图像。基本上那些存储在输入中的32个真/假值。我需要将它们整理成一个32位整数。
我想知道的是如何将这32个值整理成一个32位字符串,即(0000 0000 0000 1000 1000 1000 1000 1000),这显然是一个32位整数,并给出一个88888的十进制数。 / p>
而我现在只是被困住,因为我不确定它应该使用什么命令。
答案 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);
这里已经回答了。
答案 3 :(得分: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#课程,你会学到很多东西,不管怎样,我希望这是你想要的,如果你想要一个整数数组,只需删除最后一行。请下次在帖子中包含更多信息。