Преобразование двоичного значения из 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;
        }
    }

Это не особенно многословно, но в моей голове, прежде чем я начал, это должно было быть несколько строк в каждом методе, возможно, лучше использовать некоторые .NET-классы, такие как System.Convert (хотя я не могу понять, как сделай это). Есть ли более чистый способ сделать это? Есть ли у вас какие-либо другие предложения по улучшению?

11 голосов | спросил Subcreation 2 AM00000070000001431 2011, 07:09:14

1 ответ


15

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

Преобразование в BitArray ненужно копирует значения в массив bool bits. Вместо этого вы можете использовать это при преобразовании обратно в int.

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];
    }
}
ответил Jeff Mercado 2 AM00000080000003131 2011, 08:44:31

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132