c# 陣列轉int - 將int轉換為.NET中的位數組




int轉char c#陣列轉數字 (7)

如何將int轉換為位數組?

如果我有一個值為3的int我想要一個數組,其長度為8,如下所示:

0 0 0 0 0 0 1 1

這些數字中的每一個都在數組中的單獨插槽中,大小為8。


Answers

我會用單線程實現它,如下所示:

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));
        }
    }
}

請注意, BitArray每個元素都存儲為bool,如下面的快照所示:

所以下面的代碼工作:

if (myBitArray[0] == false)
{
    //this code block will execute
}

但是下面的代碼根本沒有編譯:

if (myBitArray[0] == 0)
{
    //some code
}

要轉換int'x'

int x = 3;

一種方法,通過對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

或者,通過使用BitArray類 -

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

    public static bool[] Convert(int[] input, int length)
    {
        var ret = new bool[length];
        var siz = sizeof(int) * 8;
        var pow = 0;
        var cur = 0;

        for (var a = 0; a < input.Length && cur < length; ++a)
        {
            var inp = input[a];

            pow = 1;

            if (inp > 0)
            {
                for (var i = 0; i < siz && cur < length; ++i)
                {
                    ret[cur++] = (inp & pow) == pow;

                    pow *= 2;
                }
            }
            else
            {
                for (var i = 0; i < siz && cur < length; ++i)
                {
                    ret[cur++] = (inp & pow) != pow;

                    pow *= 2;
                }
            }
        }

        return ret;
    }

使用Convert.ToString (value, 2)

所以在你的情況下

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


int value = 3;

var array = Convert.ToString(value, 2).PadLeft(8, '0').ToArray();

我剛碰到一個實例......

int val = 2097152;
var arr = Convert.ToString(val, 2).ToArray();
var myVal = arr[21];

......沒有產生我想要的結果。 在上面的'myVal'中,存儲在位置21的數組中的值為'0'。 應該是'1'。 我不確定為什麼我收到了一個不准確的值,它讓我感到困惑,直到我在C#中找到另一種方法將INT轉換為位數組:

int val = 2097152;
var arr = new BitArray(BitConverter.GetBytes(val));
var myVal = arr[21];

這會將結果'true'作為'myVal'的布爾值。

我意識到這可能不是獲得這個值的最有效方法,但它非常簡單,簡單,可讀。


我想建議'從enum獲得'int'值的例子是'

public enum Sample
{Book =1, Pen=2, Pencil =3}

int answer = (int)Sample.Book;

現在答案將是1。

我希望這可以幫助某人。





c# .net