Преобразование двоичного значения из типа bitarray в int и обратно в C#


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

Я сжать (заимствовать и изменять немного из пару разных примеров, которые я нашел):

    public class BinaryConverter
    {
        public static BitArray ToBinary(int numeral)
        {
            BitArray binary = new BitArray(new int[] { numeral });
            bool[] bits = new bool[binary.Count];
            binary.CopyTo(bits, 0);
            return binary;
        }

        public static int ToNumeral(BitArray binary, int length)
        {
            int numeral = 0;
            for (int i = 0; i < length; i++)
            {
                if (binary[i])
                {
                    numeral = numeral | (((int)1) << (length - 1 - i));
                }
            }
            return numeral;
        }
    }

Он не особенно многословен, но в моей голове прежде чем я начал это надо было пару строк на метод, возможно, использовать некоторые .Классы сетей, как системы.Преобразования (хотя, я не совсем понимаю как это сделать). Там чище способ сделать это? Есть ли у вас другие предложения по улучшению?



22527
10
задан 2 августа 2011 в 03:08 Источник Поделиться
Комментарии
1 ответ

Вы сделали это гораздо сложнее, чем это необходимо.

Преобразования типа bitarray напрасно копирует значения к типу bool массив битов. Вы могли бы использовать, что на преобразование обратно в инт.

public static class BinaryConverter
{
public static BitArray ToBinary(this int numeral)
{
return new BitArray(new[] { numeral });
}

public static int ToNumeral(this BitArray binary)
{
if (binary == null)
throw new ArgumentNullException("binary");
if (binary.Length > 32)
throw new ArgumentException("must be at most 32 bits long");

var result = new int[1];
binary.CopyTo(result, 0);
return result[0];
}
}

14
ответ дан 2 августа 2011 в 04:08 Источник Поделиться