Мне нужно взять int и преобразовать его в двоичную запись (C #) - PullRequest
2 голосов
/ 21 февраля 2011

Мне нужно взять int и превратить его в байтовую форму.

т.е. Мне нужно взять «1» и превратить его в «00000001» или «160» и превратить его в «10100000»

В настоящее время я использую это

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

Это ужасный способ делать что-то, поэтому я ищу лучший способ.

Есть предложения?

EDIT

По сути, мне нужно получить список с каждым числом до 256 в базе-2. Я собираюсь сохранить все числа в списке и сохранить их в таблице на моей базе данных.

UPDATE

Я решил сохранить число base-2 в виде строки, а не анализировать его обратно. Спасибо за помощь и извините за сумбур!

Ответы [ 5 ]

4 голосов
/ 21 февраля 2011

Если вам нужна форма byte, вам следует взглянуть на метод BitConverter.GetBytes().Он не возвращает строку, а массив байтов.

1 голос
/ 21 февраля 2011

Вы можете использовать BitArray.

Код выглядит немного неуклюжим, но его можно немного улучшить.

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);
1 голос
/ 21 февраля 2011

Я не знаю, что вам нужно в конце ... это может помочь:

Превратить int в массив int:

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

Превратить int в битовый массив:

BitArray bitArray = new BitArray(new[] {x});
1 голос
/ 21 февраля 2011

int - это уже двоичное число.Что именно вы хотите сделать с новым целым числом?Что вы делаете, это устанавливаете число 10 в значение 2.Это немного сбивает с толку, и я думаю, что вы, должно быть, пытаетесь сделать что-то, что должно произойти по-другому.

0 голосов
/ 21 февраля 2011

Я думаю, вы путаете тип данных Integer с его текстовым представлением.

int x = 3;

- это число три, независимо от представления (двоичное, десятичное, шестнадцатеричное и т. Д.). Когда вы анализируете двоичное текстовое представление целого числа обратно в целое, вы получаете другое число.Каркас предполагает, что вы анализируете число, представленное в десятичной основе, и выдает соответствующее целое число.Вы можете попробовать

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

, и это вызовет исключение, потому что двоичное представление 1600, интерпретируемое как десятичное, слишком велико, чтобы поместиться в целое число

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...