C#把汉字转换成16进制(HEX)并向串口发送数据

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
using System.Text.RegularExpressions;
using System.Windows.Forms;

namespace ZKJFJK
{
    /***
     报警器语音输出类,只需在调用时填写需要播报汉字即可
     * 例:bool TF = new sendvoice().send("机房报警温度过高");
     * 其返回一个bool类型值TF,当TF为True时。则发送成功,否则发送失败;
     */
    class sendvoice
    {
        SerialPort spformdata = new SerialPort();//实例化串口通讯类
        public bool send(string voicestr)
        {
            spformdata.Close();
            spformdata.PortName = "COM9";//串口号
            spformdata.BaudRate = 9600;//波特率
            spformdata.DataBits = 8;//数据位
            spformdata.StopBits = (StopBits)int.Parse("1");//停止位
            spformdata.ReadTimeout = 500;//读取数据的超时时间,引发ReadExisting异常
            spformdata.Open();//打开串口
            byte[] temp = new byte[1];
            try
            {
                /***************** 汉字转换为十六进制数(hex)部分 ********************************/
                //把汉字转换为十六进制数(hex)
                if ((voicestr.Length % 2) != 0)
                {
                    voicestr += " ";//空格
                }
                System.Text.Encoding chs = System.Text.Encoding.GetEncoding("gb2312");
                byte[] bytes = chs.GetBytes(voicestr);
                string str = "";
                for (int i = 0; i < bytes.Length; i++)
                {
                    str += string.Format("{0:X}", bytes[i]);
                }
                string voicehex = "23" + str + "ff ff ff"; //转换成功的16进制数,加上报警器格式的开头与结尾

                /***************** 串口发送数据部分 ***********************************************/
                //首先判断串口是否开启
                if (spformdata.IsOpen)
                {
                    int num = 0;   //获取本次发送字节数
                    //串口处于开启状态,将发送区文本发送
                    //判断发送模式
                    if (true)
                    {
                        //以HEX模式发送
                        //首先需要用正则表达式将用户输入字符中的十六进制字符匹配出来
                        string buf = voicehex;
                        string pattern = @"s";
                        string replacement = "";
                        Regex rgx = new Regex(pattern);
                        string send_data = rgx.Replace(buf, replacement);
                        //不发送新行
                        num = (send_data.Length - send_data.Length % 2) / 2;
                        for (int i = 0; i < num; i++)
                        {
                            temp[0] = Convert.ToByte(send_data.Substring(i * 2, 2), 16);
                            spformdata.Write(temp, 0, 1);  //循环发送
                        }
                        //自动发送新行
                        spformdata.WriteLine("");
                        return true;
                    }
                }
            }
            catch (Exception ex)
            {
                spformdata.Close();
                //捕获到异常,创建一个新的对象,之前的不可以再用
                spformdata = new System.IO.Ports.SerialPort();
                //响铃并显示异常给用户
                System.Media.SystemSounds.Beep.Play();
                MessageBox.Show(ex.Message);
            }
            return false;
        }
    }
}

 

你可能感兴趣的