C#端口的二进制数据转换为十六进制字符串

C#端口的二进制数据转换为十六进制字符串,c#,binary,hex,port,C#,Binary,Hex,Port,我找到了一个源代码,并对其进行了一些修改,以便可以从com6上的接收器检索数据。我收到的数据是二进制的。现在我想把它转换成十六进制字符串。如果它是一个十六进制字符串,我们可以切割字符串的一部分并分别解码。我该怎么做 代码如下: using System; using System.IO.Ports; using System.Threading; public class PortChat { static bool _continue; static SerialPort _s

我找到了一个源代码,并对其进行了一些修改,以便可以从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);
    }
}

查看
BitConverter.ToString()
方法

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

十六进制包含您想要的字符串

为什么重新发布?你只会编辑那篇文章。显示您是如何接收的,以及您希望如何将其转换为??可能的副本,以便您知道。您收到的所有数据都是二进制的。这就是为什么在不理解代码的情况下使用代码是个坏主意。当我使用_SerialPort.ReadLine()然后使用console.write时,我会看到一个随机字符和符号的屏幕,这些字符和符号毫无意义。我想要的是将二进制数据包转换成十六进制字符串,然后对其进行操作。