C#把汉字转换成16进制(HEX)并向串口发送数据 原文:C#把汉字转换成16进制(HEX)并向串口发送数据
报警器实例:(有发送,无返回获取)
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.IO.Ports; 6 using System.Text.RegularExpressions; 7 using System.Windows.Forms; 8 9 namespace ZKJFJK10 {11/***12报警器语音输出类,只需在调用时填写需要播报汉字即可13* 例:bool TF = new sendvoice().send("机房报警温度过高");14* 其返回一个bool类型值TF,当TF为True时。则发送成功,否则发送失败;15*/16class sendvoice17{18 SerialPort spformdata = new SerialPort();//实例化串口通讯类19 public bool send(string voicestr)20 {21 spformdata.Close();22 spformdata.PortName = "COM9";//串口号23 spformdata.BaudRate = 9600;//波特率24 spformdata.DataBits = 8;//数据位25 spformdata.StopBits = (StopBits)int.Parse("1");//停止位26 spformdata.ReadTimeout = 500;//读取数据的超时时间,引发ReadExisting异常27 spformdata.Open();//打开串口28 byte[] temp = new byte[1];29 try30 {31 /***************** 汉字转换为十六进制数(hex)部分 ********************************/32 //把汉字转换为十六进制数(hex)33 if ((voicestr.Length % 2) != 0)34 {35 voicestr += " ";//空格36 }37 System.Text.Encoding chs = System.Text.Encoding.GetEncoding("gb2312");38 byte[] bytes = chs.GetBytes(voicestr);39 string str = "";40 for (int i = 0; i < bytes.Length; i++)41 {42 str += string.Format("{0:X}", bytes[i]);43 }44 string voicehex = "23" + str + "ff ff ff"; //转换成功的16进制数,加上报警器格式的开头与结尾45 46 /***************** 串口发送数据部分 ***********************************************/47 //首先判断串口是否开启48 if (spformdata.IsOpen)49 {50 int num = 0; //获取本次发送字节数51 //串口处于开启状态,将发送区文本发送52 //判断发送模式53 if (true)54 {55//以HEX模式发送56//首先需要用正则表达式将用户输入字符中的十六进制字符匹配出来57string buf = voicehex;58string pattern = @"\s";59string replacement = "";60Regex rgx = new Regex(pattern);61string send_data = rgx.Replace(buf, replacement);62//不发送新行63num = (send_data.Length - send_data.Length % 2) / 2;64for (int i = 0; i < num; i++)65{66 temp[0] = Convert.ToByte(send_data.Substring(i * 2, 2), 16);67 spformdata.Write(temp, 0, 1); //循环发送68}69//自动发送新行70spformdata.WriteLine("");71return true;72 }73 }74 }75 catch (Exception ex)76 {77 spformdata.Close();78 //捕获到异常,创建一个新的对象,之前的不可以再用79 spformdata = new System.IO.Ports.SerialPort();80 //响铃并显示异常给用户81 System.Media.SystemSounds.Beep.Play();82 MessageBox.Show(ex.Message);83 }84 return false;85 }86}87 }
posted on -04-15 22:15 NET未来之路 阅读(...) 评论(...) 编辑 收藏