开发者

I need to take an int and convert it into its binary notation (C#)

I need to take an int and turn it into its byte form.

i.e. I need to take '1' and turn it into '00000001' or '160' and turn it into '10100000'

Currently, I am using this

            int x = 3;
            string 开发者_StackOverflow中文版s = Convert.ToString(x, 2);
            int b = int.Parse(s);

This is an awful way to do things, so I am looking for a better way.

Any Suggestions?

EDIT

Basically, I need to get a list of every number up to 256 in base-2. I'm going to store all the numbers in a list, and keep them in a table on my db.

UPDATE

I decided to keep the base-2 number as a string instead of parsing it back. Thanks for the help and sorry for the confusion!


If you need the byte form you should take a look at the BitConverter.GetBytes() method. It does not return a string, but an array of bytes.


The int is already a binary number. What exactly are you looking to do with the new integer? What you are doing is setting a base 10 number to a base 2 value. That's kind of confusing and I think you must be trying to do something that should happen a different way.


I don't know what you need at the end ... this may help:

Turn the int into an int array:

byte[] bytes = BitConverter.GetBytes(x);

Turn the int into a bit array:

BitArray bitArray = new BitArray(new[] {x});


You can use BitArray.

The code looks a bit clumsy, but that could be improved a bit.

int testValue = 160;
System.Collections.BitArray bitarray = new System.Collections.BitArray(new int[] { testValue });
var bitList = new List<bool>();
foreach (bool bit in bitarray)
    bitList.Add(bit);
bitList.Reverse();
var base2 = 0;
foreach (bool bit in bitList)
{
    base2 *= 10; // Shift one step left
    if (bit)
        base2++; // Add 1 last
}

Console.WriteLine(base2);


I think you are confusing the data type Integer with its textual representation.

int x = 3;

is the number three regardless of the representation (binary, decimal, hexadecimal, etc.) When you parse the binary textual representation of an integer back to integer you are getting a different number. The framework assumes you are parsing the number represented in the decimal base and gives the corresponding integer. You can try

int x = 1600;
string s = Convert.ToString(x, 2);
int b = int.Parse(s);

and it will throw an exception because the binary representation of 1600 interpreted as decimal is too big to fit in an integer

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜