【问题标题】:convert binary string to integer array in c# [closed]在c#中将二进制字符串转换为整数数组[关闭]
【发布时间】:2014-01-04 23:19:00
【问题描述】:

我想在c#中将二进制值转换为整数数组。

例如考虑二进制值:111,它的整数等效值为7(最右边的数字等于整数1,中间的二进制数字等于整数2,最左边的数字是4,所以1 + 2 + 4 = 7)。

如何使用 c# 以数组(或列表)的形式获取每个整数位(即 1、2、4)?

【问题讨论】:

  • 您能否重新表述您的问题..?你只是想要二进制的地方吗?还是您想要二进制表示中的值 7 ..?提供一些伪代码或其他东西,以便我们了解您的目标。
  • 为什么不只需要整数,并根据需要从中提取位?

标签: c#


【解决方案1】:
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();

【讨论】:

  • @LB 如果你还想长,使用1L &lt;&lt; i。或者也许ulong,使用1ul。如果字符串长度超过 31、63 或 64 (1ul),这将产生奇怪的结果,因此您可能需要检查一下。
  • @JeppeStigNielsen ((BigInteger)1 &lt;&lt; i) 让它无限(!)怎么样?
  • @L.B 是的,太好了。
【解决方案2】:

像这样:

string binaryString = "111";
var integerValue = Convert.ToInt64(binaryString,2);

integerValue 现在是 7 岁。

更新,感谢 cmets:

如果您想存储每个值,则需要在 for 循环和位移 (&lt;&lt; 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, 2 ,4)”.. 或者这甚至意味着什么相关。
  • 为什么我感觉我在做别人的作业? :)
  • 可能是因为只有老师才会想出一个像这个一样愚蠢的练习......或者你只是被骗了。无论哪种方式,都有一个 +1
  • 如果你喜欢,你可以用1 &lt;&lt; i代替(int)Math.Pow(2, i)
  • @JeppeStigNielsen :)),现在我感觉我回到了大学! Thx,这样看起来更酷! :) 很长一段时间我都在使用位移
【解决方案3】:

你想要什么并不完全清楚,但我们假设从这个字符串:

"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' 的每个字符
  • 从右边开始计算位置,最右边的位置是位置 0
  • 然后它会计算1 &lt;&lt; x(x是那个位置),它会返回1代表最右边的位置,2代表它的左边,4代表2的左边,8代表下一个,16、32 、64 等。
  • 此时的数组将是 [64, 0, 16, 8, 0, 2, 1],因此我们将删除零

【讨论】:

  • 谢谢大家,您的反馈很有帮助..
猜你喜欢
  • 2018-03-01
  • 2017-05-14
  • 2018-07-07
  • 1970-01-01
  • 2022-08-16
  • 2012-02-27
  • 1970-01-01
  • 2012-08-16
相关资源
最近更新 更多