【问题标题】:How to convert an integer to binary stored in array如何将整数转换为存储在数组中的二进制
【发布时间】:2016-10-14 09:41:35
【问题描述】:

我知道如何将整数从十进制转换为固定长度的二进制字符串:

int number = 3;
int toBase = 2;
int length = 8;
Convert.ToString(number, toBase).PadLeft(length, '0')

输出:

00000011

如何将该二进制字符串的各个元素分配给int(或bool)数组,以便在转换后数组看起来像1

int[] binary = {0, 0, 0, 0, 0, 0, 1, 1}

bool[] binary = {false, false, false, false, false, false, true, true};

1.使用设施而不是琐碎的for 循环与charint(或bool)类型转换。

【问题讨论】:

标签: c# arrays binary type-conversion


【解决方案1】:

您可以添加一些 Linq 来将string 表示为一个数组:

string source = Convert.ToString(number, toBase).PadLeft(length, '0');

...

int[] binary = source.Select(c => c - '0').ToArray();

...

bool[] binary = source.Select(c => c == '1').ToArray();

或者你可以直接计算数组:

int[] binary = Enumerable
  .Range(1, length)
  .Select(i => number / (1 << (length - i)) % 2)
  .ToArray();

bool[] binary = Enumerable
  .Range(1, length)
  .Select(i => number / (1 << (length - i)) % 2 == 1)
  .ToArray(); 

【讨论】:

    【解决方案2】:

    如果存储自己创建的字符串,例如

    string theBinaryString = Convert.ToString(number, toBase).PadLeft(length, '0');
    int[] binary = new int[8];
    for(int i = 0; i < 8; i++)
    {
        binary[i] = int.parse(theBinaryString[i].ToString());
    }
    

    循环完成后,您将获得要查找的数组,ToString() 是必需的,因为从字符串中选择就好像它是一个数组返回一个 char,它不能被解析为 int。

    【讨论】:

      【解决方案3】:

      不用将数字转换成二进制字符串也可以:

      var num = 123;
      var bits = Enumerable.Range(0, 8).Select(i => (num >> (7-i)) & 1).ToArray();
      

      这个想法是按顺序将数字右移一个递减的位置,并屏蔽除最低有效位之外的所有位。

      Demo.

      【讨论】:

      • 感谢您的回答!那是 int 数组对吗?
      • @Ziezi 是的,这会产生一个ints 的数组。如果您想要chars 的数组,请将条件添加到Select 表达式,或将结果添加到'0' 以将int 转换为char 数字。
      【解决方案4】:

      可能是这样的;

      "1000110101110".ToCharArray().Select(c => c - '0').ToArray()
      

      会给你:

      int[13] { 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0 }
      

      【讨论】:

      • 48 - 幻数,这是一个坏的部分;换成'0'
      • 在阅读您的代码时,很不清楚 48 代表什么。输入'0',即c =&gt; c - '0' 以使其明显:当前字符减去'0'
      • 虽然我有点明白你在说什么,但由于我们正在编程并且正在使用 chararray 函数,因此我的想法应该很明显,48 是从 c 中减去的整数,a特点。如果您愿意,可以进行编辑。
      【解决方案5】:
      int[] intArray = stringNumber.ToCharArray().Select(n => Convert.ToInt32(n)).ToArray();
      

      【讨论】:

      • @viveknuna 是的,我修好了。我的坏
      猜你喜欢
      • 2019-03-29
      • 2020-12-05
      • 1970-01-01
      • 2012-12-15
      • 2013-09-09
      • 2016-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多