我想在c#中将二进制值转换为整数数组。
例如考虑二进制值:111,它的等价整数等于7(最右边的数字等于整数1,中间的二进制数字等于整数2,最左边的数字是4,所以1 + 2 + 4 = 7)。
如何使用c#以数组(或列表)的形式获取每个整数位(即1,2,4)?
答案 0 :(得分:3)
像这样:
string binaryString = "111";
var integerValue = Convert.ToInt64(binaryString,2);
integerValue
现在将是7。
更新,感谢评论:
如果你想存储每个值,那么你需要在for循环和位移(<< operator
)中逐步完成字符串,以达到你想要的结果。
[Test]
public void BinaryStringToValues()
{
const string binaryString = "111";
var values = new List<int>();
for (var i = 0; i < binaryString.Length; i++)
{
if (binaryString[binaryString.Length - i - 1] == '0')
{
continue;
}
values.Add(1 << i);
}
Assert.AreEqual(1, values[0]);
Assert.AreEqual(2, values[1]);
Assert.AreEqual(4, values[2]);
}
测试将通过。
答案 1 :(得分:3)
string bin = "1011";
var str = String.Join(",", bin.Reverse().Select((c, i) => (c - '0') * (1 << i)));
str将是1,2,0,8
。如果你想把结果作为一个列表
var list = bin.Reverse().Select((c, i) => (c - '0') * (1 << i)).ToList();
答案 2 :(得分:2)
你想要的并不完全清楚,但我们假设从这个字符串开始:
"1011011"
你想得到这个数组:
64, 16, 8, 2, 1
然后您可以使用此代码(LINQPad程序):
void Main()
{
string input = "1011011";
int[] values = input
.Select((value, idx) => value == '1'
? (1 << (input.Length - idx - 1))
: 0)
.Where(value => value > 0)
.ToArray();
values.Dump();
}
输出:
这将:
'1'
1 << x
(x就是那个位置),最右边的位置会返回1,左边的一个会返回2,2的左边是4,下一个是8,16 ,32,64等等。[64, 0, 16, 8, 0, 2, 1]
,因此我们将删除零