C # бинарный в строку - PullRequest
0 голосов
/ 09 июня 2011

Я читаю с последовательного порта, используя string messaga = _serialPort.ReadLine(); Когда я Console.WriteLine(messaga); случайные символы появляются на экране, что логично, потому что двоичные данные не являются ASCII. Я предполагаю, что метод, который я использую, обрабатывает данные как ascii. То, что я хотел бы сделать, это создать строку var и присвоить ей двоичные необработанные данные, поступающие из порта, поэтому, когда я console.write этот var, я хочу видеть строку с двоичными данными, такими как 1101101110001011010 и символы NOT. Как я могу справиться с этим?

Ответы [ 2 ]

5 голосов
/ 09 июня 2011

Украдено из Как преобразовать строку в ascii в двоичный файл в C #?

foreach (string letter in str.Select(c => Convert.ToString(c, 2)))
{
  Console.WriteLine(letter);
}
0 голосов
/ 09 июня 2011

Вы имеете в виду, как это?

class Utility
{
  static readonly string[] BitPatterns ;
  static Utility()
  {
    BitPatterns = new string[256] ;
    for ( int i = 0 ; i < 256 ; ++i )
    {
      char[] chars = new char[8] ;
      for ( byte j = 0 , mask = 0x80 ; mask != 0x00 ; ++j , mask >>= 1 )
      {
        chars[j] = ( 0 == (i&mask) ? '0' : '1' ) ;
      }
      BitPatterns[i] = new string( chars ) ;
    }
    return ;
  }

  const int BITS_PER_BYTE = 8 ;
  public static string ToBinaryRepresentation( byte[] bytes )
  {
    StringBuilder sb = new StringBuilder( bytes.Length * BITS_PER_BYTE ) ;

    foreach ( byte b in bytes )
    {
      sb.Append( BitPatterns[b] ) ;
    }

    string instance = sb.ToString() ;
    return instance ;
  }

}
class Program
{
  static void Main()
  {
    byte[] foo = { 0x00 , 0x01 , 0x02 , 0x03 , } ;
    string s   = Utility.ToBinaryRepresentation( foo ) ;
    return ;
  }
}

Бенчмарк это только сейчас. Приведенный выше код примерно в 12 раз быстрее, чем при использовании Convert.ToString(), и примерно в 17 раз быстрее, если коррекция добавляется на пэд с начальными нулями.

...