none
Как преобразовать int[] в bool[], а потом в string[]? RRS feed

  • Вопрос

  • Есть массив десятичных чисел. Нужен массив строк, но в виде двоичного отображения этих чисел.
    Т.е. число 255, должно быть записано, как строка 11111111.
    Как это преобразование сделать покороче?

    P.S. здесь Преобразования bool[] в byte[] для VB.Net и C# хорошо показано, как bool[] в int[] переводить. Есть такой же способ обратного перевода?

    29 марта 2012 г. 13:08

Ответы

  • Я не понял, для чего преобразование в bool?

    Если нужно двоичное представление чисел, то проще всего использовать Convert.ToString.

    int n = 255;
    string s = Convert.ToString(n, 2); // 11111111
    
    
    int[] numbers = { 255, 100, 5 };
    string[] strings = numbers.Select(num => Convert.ToString(num, 2)).ToArray();

    • Предложено в качестве ответа Abolmasov Dmitry 29 марта 2012 г. 14:23
    • Помечено в качестве ответа sg6336 29 марта 2012 г. 15:09
    29 марта 2012 г. 13:36
  • Нужно что бы строка отображала 8-ми разрядное двоичное число.
    255 как 11111111
    2 как 00000010
    Т.е. что бы нолики дописывались вначале.

    Convert.ToString(num, 2).PadLeft(8, '0')


    • Помечено в качестве ответа sg6336 29 марта 2012 г. 15:09
    29 марта 2012 г. 14:58

Все ответы

  • Я не понял, для чего преобразование в bool?

    Если нужно двоичное представление чисел, то проще всего использовать Convert.ToString.

    int n = 255;
    string s = Convert.ToString(n, 2); // 11111111
    
    
    int[] numbers = { 255, 100, 5 };
    string[] strings = numbers.Select(num => Convert.ToString(num, 2)).ToArray();

    • Предложено в качестве ответа Abolmasov Dmitry 29 марта 2012 г. 14:23
    • Помечено в качестве ответа sg6336 29 марта 2012 г. 15:09
    29 марта 2012 г. 13:36
  • Можно и так например, покороче не будет но тоже способ.

    using System;
    
    namespace ConsoleApplication1
    {
      class Program
      {
        static void Main(string[] args)
        {
          int[] temp = new int[] { 255, 30, 42 };
          string[] stemp = temp.ParseIntToBinary();
          foreach(var i in stemp)
          Console.WriteLine(i);
        }
      }
      public static class Convertor
      {
        public static string[] ParseIntToBinary(this int[] value)
        {
          string[] retval = new string[value.Length];
          for (int i = 0; i < value.Length; i++)
          {
            while (value[i] != 0)
            {
              retval[i] = (value[i] % 2) + retval[i];
              value[i] = value[i] / 2;
            }
          }
          return retval;
        }
      }
    }

    • Предложено в качестве ответа Abolmasov Dmitry 29 марта 2012 г. 14:23
    29 марта 2012 г. 13:58
    Модератор
  • Уважаемый пользователь,

    Пожалуйста, не забудьте отметить ответ, который является решением вашей проблемы.

    Спасибо.


    Для связи [mail]

    29 марта 2012 г. 14:23
  • int[] numbers = { 255, 100, 5 };
    string[] strings = numbers.Select(num => Convert.ToString(num, 2)).ToArray();

    Весьма понравился этот ответ, но можно его доработать?
    Нужно что бы строка отображала 8-ми разрядное двоичное число.
    255 как 11111111
    2 как 00000010
    Т.е. что бы нолики дописывались вначале.


    Вот рабочий кусок кода.
    Подскажите, как его записать через лямбда выражение (как у Вас)?

     //Это Ваш код
    string[] MyArr = MyArr3.Select(num => Convert.ToString(num, 2)).ToArray(); //преобразовую число в строку (двоичное число)
    //Как это записать через лямбда выражение?
    string item;
    for (int BL = 0; BL < MyArr.Length; BL++)
    {
       item = MyArr[BL];
       if (item.Length < 8)
       {
          for (int L = item.Length; L < 8; L++)
          {
             item = String.Concat("0", item);
          }
       }
       MyArr[BL] = item;
    }

    Нужно что бы строка отображала 8-ми разрядное двоичное число.
    • Изменено sg6336 29 марта 2012 г. 14:55
    29 марта 2012 г. 14:32
  • Нужно что бы строка отображала 8-ми разрядное двоичное число.
    255 как 11111111
    2 как 00000010
    Т.е. что бы нолики дописывались вначале.

    Convert.ToString(num, 2).PadLeft(8, '0')


    • Помечено в качестве ответа sg6336 29 марта 2012 г. 15:09
    29 марта 2012 г. 14:58
  • Спасибо, работает
    29 марта 2012 г. 15:09