如何使用C#form app将十六进制字符发送到串行端口?

如何使用C#form app将十六进制字符发送到串行端口?,c#,serial-port,format,hex,C#,Serial Port,Format,Hex,我想通过COM端口发送十六进制。我已经手动准备了代码,但它是用于字符串发送的 我需要从文本框读取数据,然后以十六进制格式发送到COM端口。 目前,我正在处理以下发送代码的按钮点击,但目前它正在发送硬编码的值,但我需要从文本字段中获取的值 private void btnSendData_Click(object sender, EventArgs e) { if (serialPort1.IsOpen) { dataOUT = tBoxDataOut.Text; if

我想通过COM端口发送十六进制。我已经手动准备了代码,但它是用于字符串发送的

我需要从文本框读取数据,然后以十六进制格式发送到COM端口。
目前,我正在处理以下发送代码的按钮点击,但目前它正在发送硬编码的值,但我需要从文本字段中获取的值

private void btnSendData_Click(object sender, EventArgs e) {
 if (serialPort1.IsOpen) { 
     dataOUT = tBoxDataOut.Text;
     if (sendWith == "WriteLine") { 
        serialPort1.WriteLine(dataOUT);
     } else if (sendWith == "Write") {
        serialPort1.Write(dataOUT);
     }
  }
}

您可以阅读有关标准数字格式字符串的内容。阅读“十六进制(“X”)格式说明符”一节

我想包括一个简单的工作示例。我没有COM端口,但com0com虚拟驱动程序在本演示中运行良好;你可以下载它。我还使用Putty显示端口接收到的数据;你可以下载它

以下是我的节目:

public class HexConvert
{
    SerialPort mySerialPort;

    public HexConvert()
    {
        InitPort();
    }

    void InitPort()
    {
        mySerialPort = new SerialPort("COM1");

        mySerialPort.BaudRate = 9600;
        mySerialPort.Parity = Parity.None;
        mySerialPort.StopBits = StopBits.One;
        mySerialPort.DataBits = 8;
        mySerialPort.Handshake = Handshake.None;
    }

    public void SendMessage()
    {
        try
        {
            string s = "15"; // "F" In Hexadecimal
            int x = Int32.Parse(s);
            string s2 = x.ToString("X");

            if(!mySerialPort.IsOpen)
                mySerialPort.Open();

            mySerialPort.WriteLine(s2);

            mySerialPort.Close();
        }
        catch(Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}
以下是我的com0com实用程序的配置(我添加了COM1和COM2对;在此模拟器中没有执行其他操作):

这是我的Putty配置(注意,我在程序中使用了COM1,在Putty中使用了COM2):

最后,这里是我的演示应用程序生成的输出:


在此处输入图像描述


i、 stack.imgur.com/LfKM5.png

private void btnSendData_Click(object sender,EventArgs e){if(serialPort1.IsOpen){dataOUT=tBoxDataOut.Text;if(sendWith==“WriteLine”){serialPort1.WriteLine(dataOUT);}else if(sendWith==“Write”){serialPort1.Write(dataOUT);}}}}是按钮send上的函数,但它是字符串格式的。需要十六进制。感谢您的支持。请回答您的问题,而不是在评论中提供额外的信息。您所说的“发送十六进制”是什么意思?你的意思是将数字转换成十六进制字符串,然后发送这些字符串吗?试图从作者最初写的内容中恢复问题,但是我不能100%确定这是否是你的意思@nedyakopeshevwhith Parse to int,我们还有输出的ASCII码。我发送0位,实际上发送30=0的ASCII码。@Nedyakopeshev,当您构建serialPort1时;您是否指定了正确的名称、波特率和奇偶校验(如中所示),它们是否与设备管理器下的windows设置相匹配?你可能必须改变其中一个,或者两者都改变。您使用哪个程序/设备评估输出?波特率默认为9600,Com未选择默认值。您需要选择COM,但程序参数和设备管理器设置的设置是完全相同的。我认为主要的问题是数据发送到COM端口,因为我们在文本框中键入,但需要将此信息转换为十六进制类型。我的电脑上没有串行端口,所以我使用了com0com仿真器。我还使用Putty来显示发送的字节;我将在答案中添加示例代码。看。举个例子。我需要输入十六进制值,还需要将它们发送到串行端口,但textbox无法为我提供发送实际十六进制值的方法:40 50 3e fa 55 bf 01 00 2C 04 01 05 1f 04 01。这就是我需要做的——用C#form app和textbox将十六进制序列发送到串行端口上的外部模块。如果你有其他想法。非常感谢你的支持。
public class HexConvert
{
    SerialPort mySerialPort;

    public HexConvert()
    {
        InitPort();
    }

    void InitPort()
    {
        mySerialPort = new SerialPort("COM1");

        mySerialPort.BaudRate = 9600;
        mySerialPort.Parity = Parity.None;
        mySerialPort.StopBits = StopBits.One;
        mySerialPort.DataBits = 8;
        mySerialPort.Handshake = Handshake.None;
    }

    public void SendMessage()
    {
        try
        {
            string s = "15"; // "F" In Hexadecimal
            int x = Int32.Parse(s);
            string s2 = x.ToString("X");

            if(!mySerialPort.IsOpen)
                mySerialPort.Open();

            mySerialPort.WriteLine(s2);

            mySerialPort.Close();
        }
        catch(Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}