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

时间: 2024-08-07 16:44:34

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

将16进制字符串转换成16进制数据

var tb1 = Tb1.Text; if (string.IsNullOrEmpty(tb1)) { tb1 = "0000"; } var s1 = tb1.Substring(0, 2); var int_1 = Convert.ToInt32(s1, 16); var s2 = tb1.Substring(2, 2); var int_2 = Convert.ToInt32(s2, 16); var bt1 = Convert.ToByte(int_1); var bt2 =

ip地址转换成16进制long

<span style="font-size:18px;">public class IpUtil { /** * ip地址转换成16进制long * @param ipString * @return */ public static Long ipToLong(String ipString) { Long[] ip = new Long[4]; int pos1= ipString.indexOf("."); int pos2= ipString.

Linux c字符串中不可打印字符转换成16进制

本文由 www.169it.com 搜集整理 如果一个C字符串中同时包含可打印和不可打印的字符,如果想将这个字符串写入文件,同时方便打开文件查看或者在控制台中打印出来不会出现乱码,那么可以将字符串中的不可打印字符转换成16进制,此处提供一个函数供使用: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 void printhex(unsigned char *src,int len) {     

Java中将10进制转换成16进制

import java.util.Scanner; public class Decimal2HexConversion {     public static void main(String[] args){         Scanner input = new Scanner(System.in);         System.out.print("输入一个十进制数: ");         int decimal = input.nextInt();         Sys

object-c将RGB颜色转换成16进制HTML颜色

-(void)color:(NSString *) red andGreen:(NSString*) green andBule:(NSString*) bule{ NSInteger Red = [red integerValue]; NSInteger Green = [green integerValue]; NSInteger Bule = [bule integerValue]; NSInteger colorsize = Red<<16 | Green << 8 | B

java-pfx文件转换成16进制内容

public static void main(String[] args) throws Exception { String path = "D://111.pfx"; InputStream in = new FileInputStream(new File(path)); ByteArrayOutputStream out = new ByteArrayOutputStream(); KeyStore keyStore = KeyStore.getInstance("

本大神教你用PHP把文本内容转换成16进制数字,进行加密

<?php $a="杨波"; $b = bin2hex($a); echo $a."<br />"; $c = pack("H*",$b); echo $c."<br />"; ?> 字符限制字符限制字符限制字符限制字符限制字符限制字符限制字符限制字符限制字符限制字符限制字符限制字符限制字符限制字符限制字符限制字符限制字符限制字符限制字符限制字符限制字符限制字符限制字符限制字符限制字符限制字

将10进制整数转换成16进制整数输出

题意: 把十进制整数转换为十六进制,格式为0x开头,10~15由大写字母A~F表示. Input 每行一个整数x,0<= x <= 2^31. Output 每行输出对应的八位十六进制整数,包括前导0. 案例输出: Sample Input 0 1023 Sample Output 0x00000000 0x000003FF 注意: 用cin>>输入时无需担心Output Limint Exceeded,而用scanf输入应该加上!=EOF. 代码如下: 1 #include<

iOS开发时间戳与时间NSDate,时区的转换,汉字与UTF8,16进制的转换

http://blog.sina.com.cn/s/blog_68661bd80101njdo.html 标签: ios时间戳 ios开发时间戳 ios16进制转中文 ios开发utf8转中文 ios汉字转utf8和16进   //获取当前系统的时间戳+(long)getTimeSp{    long time;    NSDate *fromdate=[NSDate date];    time=(long)[fromdate timeIntervalSince1970];    return