如何将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)
Tje*_*les 14
使用 Convert.ToString (value, 2)
所以在你的情况下
string binValue = Convert.ToString (3, 2);
我会在单行中实现它,如下所示:
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)
我刚碰到一个实例......
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'的布尔值.
我意识到这可能不是获得这个值的最有效方法,但它非常简单,简单,可读.
| 归档时间: |
|
| 查看次数: |
101692 次 |
| 最近记录: |