C# двоичные данные из порта конвертировать в шестнадцатеричную строку


1

Вот сделка. Я нашел исходный код и немного изменил его, чтобы получить данные из ресивера, который находится на com6. Данные, которые я получаю, являются двоичными. Я хочу преобразовать его в шестнадцатеричную строку, чтобы я мог отрезать части строки и декодировать их отдельно. Как я могу это сделать?

 
using System; 
using System.IO.Ports; 
using System.Threading; 
public class PortChat 
{ 
    static bool _continue; 
    static SerialPort _serialPort; 
    public static void Main() 
    { 
     string name; 
     string message; 
     StringComparer stringComparer = StringComparer.OrdinalIgnoreCase; 
     Thread readThread = new Thread(Read); 

     // Create a new SerialPort object with default settings. 
     _serialPort = new SerialPort(); 

     // Allow the user to set the appropriate properties. 
     _serialPort.PortName = SetPortName(_serialPort.PortName); 
     _serialPort.BaudRate = SetPortBaudRate(_serialPort.BaudRate); 
     _serialPort.Parity = SetPortParity(_serialPort.Parity); 
     _serialPort.DataBits = SetPortDataBits(_serialPort.DataBits); 
     _serialPort.StopBits = SetPortStopBits(_serialPort.StopBits); 
     _serialPort.Handshake = SetPortHandshake(_serialPort.Handshake); 

     // Set the read/write timeouts 
     _serialPort.ReadTimeout = 1000; 
     _serialPort.WriteTimeout = 1000; 

     _serialPort.Open(); 
     _continue = true; 
     readThread.Start(); 

     Console.Write("Name: "); 
     name = Console.ReadLine(); 

     Console.WriteLine("Type QUIT to exit"); 

     while (_continue) 
     { 
      message = Console.ReadLine(); 

      if (stringComparer.Equals("quit", message)) 
      { 
       _continue = false; 
      } 
      else 
      { 
       _serialPort.WriteLine(
        String.Format("<{0}>: {1}", name, message)); 
      } 
     } 

     readThread.Join(); 
     _serialPort.Close(); 
    } 

    public static void Read() 
    { 
     while (_continue) 
     { 

      try 
      {    


       string message = _serialPort.ReadLine(); 
       Console.WriteLine(message); 

      catch (TimeoutException) { } 
     } 
    } 

    public static string SetPortName(string defaultPortName) 
    { 
     string portName; 

      portName = "COM6"; 

     return portName; 
    } 

    public static int SetPortBaudRate(int defaultPortBaudRate) 
    { 
     string baudRate; 


     baudRate = "9600"; 

     return int.Parse(baudRate); 
    } 

    public static Parity SetPortParity(Parity defaultPortParity) 
    { 
     string parity; 

     parity = "None"; 

     return (Parity)Enum.Parse(typeof(Parity), parity); 
    } 

    public static int SetPortDataBits(int defaultPortDataBits) 
    { 
     string dataBits; 

     dataBits = "8"; 

     return int.Parse(dataBits); 
    } 

    public static StopBits SetPortStopBits(StopBits defaultPortStopBits) 
    { 
     string stopBits; 

     stopBits = "One"; 

     return (StopBits)Enum.Parse(typeof(StopBits), stopBits); 
    } 

    public static Handshake SetPortHandshake(Handshake defaultPortHandshake) 
    { 
     string handshake; 

     handshake = "None"; 

     return (Handshake)Enum.Parse(typeof(Handshake), handshake); 
    } 
} 
  0

почему вы Повторно? вы бы отредактировали этот пост. Покажите, как вы получаете и как вы хотите преобразовать его в? 02 июн. 112011-06-02 12:50:44

  0

Возможный дубликат [Преобразование двоичных данных в C# в строку] (http://stackoverflow.com/questions/6214396/c-binary-data-conversion-to-string) 02 июн. 112011-06-02 12:53:28

  0

моя ошибка повторно отправлена ​​ 02 июн. 112011-06-02 12:54:54

  0

Просто так вы знаете. Все данные, которые вы получаете, являются двоичными. Это причина использования кода, не понимая, что это плохая идея. 02 июн. 112011-06-02 13:04:44

  0

, когда я использую _SerialPort.ReadLine(), а затем console.write, я получаю экран случайных символов и символов, которые не имеют смысла. Я хочу, чтобы эти двоичные пакеты данных преобразовывали их в шестнадцатеричную строку, а затем манипулировали им. 02 июн. 112011-06-02 13:09:00

2

Попробуйте

string Data = "123"; 
    string hex = ""; 
    foreach (char c in Data) 
    { 
     hex += String.Format("{0:x2}", (byte)c); 
    } 

шестигранной содержит строку, как вы хотели


0

Посмотрите на BitConverter.ToString() метод