将int转换为.NET中的位数组

Afr*_*fra 48 .net c#

如何将int转换为位数组?

如果我有一个值为3的int我想要一个数组,其长度为8,如下所示:

0 0 0 0 0 0 1 1
Run Code Online (Sandbox Code Playgroud)

这些数字中的每一个都在数组中的单独插槽中,大小为8.

Sve*_*ven 77

使用该BitArray课程.

int value = 3;
BitArray b = new BitArray(new int[] { value });
Run Code Online (Sandbox Code Playgroud)

如果要获取这些位的数组,可以将该BitArray.CopyTo方法与bool[]数组一起使用.

bool[] bits = new bool[b.Count];
b.CopyTo(bits, 0);
Run Code Online (Sandbox Code Playgroud)

请注意,这些位将从最不重要到最重要的存储,因此您可能希望使用Array.Reverse.

最后,如果你想为每一位得到0和1而不是布尔(我用a byte来存储每一位;比一个更少浪费int):

byte[] bitValues = bits.Select(bit => (byte)(bit ? 1 : 0)).ToArray();
Run Code Online (Sandbox Code Playgroud)


Max*_*xim 50

要转换int'x'

int x = 3;
Run Code Online (Sandbox Code Playgroud)

一种方法,通过操纵int:

string s = Convert.ToString(x, 2); //Convert to binary in a string

int[] bits= s.PadLeft(8, '0') // Add 0's from left
             .Select(c => int.Parse(c.ToString())) // convert each char to int
             .ToArray(); // Convert IEnumerable from select to Array
Run Code Online (Sandbox Code Playgroud)

或者,通过使用BitArray类 -

BitArray b = new BitArray(new byte[] { x });
int[] bits = b.Cast<bool>().Select(bit => bit ? 1 : 0).ToArray();
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!我最终得到了这段代码:string s = Convert.ToString(number,2); char [] bits = s.PadLeft(8,'0').ToCharArray(); (3认同)

Tje*_*les 14

使用 Convert.ToString (value, 2)

所以在你的情况下

string binValue = Convert.ToString (3, 2);

  • 然后`.ToCharArray()`,因为他想要一个数组. (3认同)

RBT*_*RBT 7

我会在单行中实现它,如下所示:

using System;
using System.Collections;

namespace stackoverflowQuestions
{
    class Program
    {
        static void Main(string[] args)
        {    
            //get bit Array for number 20
            var myBitArray = new BitArray(BitConverter.GetBytes(20));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意, a 的每个元素BitArray都存储为 bool ,如下面的快照所示:

在此处输入图片说明

所以下面的代码有效:

if (myBitArray[0] == false)
{
    //this code block will execute
}
Run Code Online (Sandbox Code Playgroud)

但下面的代码根本无法编译:

if (myBitArray[0] == 0)
{
    //some code
}
Run Code Online (Sandbox Code Playgroud)


Cap*_*ort 5

我刚碰到一个实例......

int val = 2097152;
var arr = Convert.ToString(val, 2).ToArray();
var myVal = arr[21];
Run Code Online (Sandbox Code Playgroud)

......没有产生我想要的结果.在上面的'myVal'中,存储在位置21的数组中的值为'0'.应该是'1'.我不确定为什么我收到了一个不准确的值,它让我感到困惑,直到我在C#中找到另一种将INT转换为位数组的方法:

int val = 2097152;
var arr = new BitArray(BitConverter.GetBytes(val));
var myVal = arr[21];
Run Code Online (Sandbox Code Playgroud)

这会将结果'true'作为'myVal'的布尔值.

我意识到这可能不是获得这个值的最有效方法,但它非常简单,简单,可读.