如何将整数转换为存储在数组中的二进制

时间:2016-10-14 09:41:36

标签: c# arrays binary type-conversion

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

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

输出:

  

00000011

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

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

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

1。使用设施而不是简单for循环charint(或bool)类型转换。

5 个答案:

答案 0 :(得分:1)

如果存储了您创建的字符串,例如

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。< / p>

答案 1 :(得分: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 :(得分:1)

也许是这样;

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

会给你:

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

答案 3 :(得分:1)

您可以在不将数字转换为二进制字符串的情况下执行此操作:

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

这个想法是将数字顺序移位一个位数减少的数字,并屏蔽除最不重要的位之外的所有位。

Demo.

答案 4 :(得分:0)

int[] intArray = stringNumber.ToCharArray().Select(n => Convert.ToInt32(n)).ToArray();