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 ZKJFJK
10 {
11     /***
12      报警器语音输出类,只需在调用时填写需要播报汉字即可
13      * 例:bool TF = new sendvoice().send("机房报警温度过高");
14      * 其返回一个bool类型值TF,当TF为True时。则发送成功,否则发送失败;
15      */
16     class sendvoice
17     {
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             try
30             {
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                         //首先需要用正则表达式将用户输入字符中的十六进制字符匹配出来
57                         string buf = voicehex;
58                         string pattern = @"\s";
59                         string replacement = "";
60                         Regex rgx = new Regex(pattern);
61                         string send_data = rgx.Replace(buf, replacement);
62                         //不发送新行
63                         num = (send_data.Length - send_data.Length % 2) / 2;
64                         for (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                         //自动发送新行
70                         spformdata.WriteLine("");
71                         return 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 }

 

转载于:https://www.cnblogs.com/weijiazheng/p/10712384.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、软件说明 ecom串口助手是一款串口(RS232)调试软件。由我爱IC导航网(http://www.52ic.net/)工作室开发。 ecom串口助手支持常用的1200 ~ 921600bps波特率,能设置校验、数据位和停止位,能以ASCII或十六进 制接收或发送任何数据或字符(包括中文),能发送任意大小的文本文件,可以任意设定自动发送周期, 并能将接收数据保存成文本文件。 发送数据支持ModebusCRC16校验、CRC16校验、累加和校验、异或校验,ModebusLRC等检验格式,是工程师调试单片机串口的好助手工具。 2、软件特点 1、 支持Windows 9x / 2000 / XP / 2003 / Vista / Win7系统; 2、 绿色软件,不需安装。运行解压软件,将压缩包解压到指定目录即可。卸载时只需将程序目录删除; 3、 支持常用的1200 ~ 921600bps波特率; 4、 端口范围是COM1-COM255,支持扩展端口(USBRS232); 5、 能设置校验、数据位和停止位; 6、 能以字符或十六进制收发数据,支持中文字符的收发; 7、 支持文件数据的发送; 8、 数据发送区允许设置发送周期,自动发送数据; 9、 支持键盘输入,将键盘数据发送到串口; 10、 支持定时保存接收窗口数据,便于查看长时间调试记录信息; 11、 有效的检测通讯错误,避免软件死机(如USB串口设备拔出检测); 12、 数据接收窗口及文件发送均采用多线程设计。 V2.00版本增加功能 1、添加Xmodem功能(128个字节发送,只支持CRC校验)。 2、增加Xmodem-1k功能(1024个字节发送,只支持CRC校验)。 3、支持命令启动Xmodem-1k功能(可以做自动传输文件功能)。 V2.20版本增加功能 1、添加自定义数据帧头,数据帧尾功能。 2、添加数据校验协议,ModebusCRC16校验、CRC16校验、累加和校验、异或校验,ModebusLRC等。 3、添加数据包镜像回发功能。 4、添加接收对话框字体修改按钮。 5、添加义符号选择。 6、支持命令串帧件发送(具体见命令串文件模板使用说明)。 7、添加窗口总是浮在最前面按钮,添加命令串隐藏显示按钮。 V2.40版本增加功能 1、增加110、300、600波特率。 2、修正接收窗体字体设置按钮功能,增加接收窗体背景色设置按钮。 3、使用许可 ECOM串口助手助手作为我爱IC导航网(http://www.52ic.net)宣传工具之一,在退出软件时会弹出网页, 如果您不想让软件退出时弹出网页,请在退出软件前点击“关闭串口”按钮,关闭串口,再退出软件。 本软件为免费软件,许可"个人用户"自由使用,复制和分发此软件包,但要保证此软件包的完整性。您 不能将本软件用于商业目的,如需要商业使用,需得到软件作者的授权许可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值