一个困扰两天的问题:
需要通过串口向设备发送的数据:0A010 7e 08 00 11 00 00 7e 76 7f
我先将每个16进制字符转换成10进制,再将其转换成ASCII码对应的字符。

        /// <summary>
/// 16进制数组转ASCII字符串
/// </summary>
/// <param name="strArrHex"></param>
/// <returns></returns>
public static string ConvertHexArrToString(string strHex)
{
StringBuilder sb = new StringBuilder();
string[] strArrHex = strHex.Split(' ');
foreach (string item in strArrHex)
{
//将十六进制转换成10进制
int ten = Convert.ToInt32(item, );
char cc = (char)ten;
sb.Append(cc);
}
string s = sb.ToString();
return s;
}

这个没有问题,但是7e 08 00 22 00 01 01 74 f4 7f就有问题了
通过Wireshark抓包发现,只要包含a开头的十六进制数都变成了3f。
捣鼓两天查各种资料终于找到了问题的根源:合法的ASCII码只到0x7F,也就是说,大于0x7F的数你转成字符再发送的话,都会变成问号,也即0x3F。
找到问题了就好解决:不能将其转换成字符,而是把要发送的内容转换成16进制字节发送。

//在串口通讯过程中,经常要用到 16进制与字符串、字节数组之间的转换
public static byte[] HexStringToBytes(string hs)
{
string[] strArr = hs.Trim().Split(' ');
byte[] b = new byte[strArr.Length];
//逐个字符变为16进制字节数据
for (int i = ; i < strArr.Length; i++)
{
b[i] = Convert.ToByte(strArr[i], );
}
//按照指定编码将字节数组变为字符串
return b;
}

字符转换成16进制字节

要发送的数据“0A010 7e 08 00 22 00 01 01 74 f4 7f”
首先将0A010转换成16进制的ASCII码即30 41 30 31 00
然后将30 41 30 31 00 7e 08 00 22 00 01 01 74 f4 7f 通过HexStringToBytes方法转换成字节发送。
我考,终于搞定了!!!

C# 发送16进制串口数据的更多相关文章

  1. shell给tcp或udp服务发送16进制报文指令

    指令:(sleep 2;echo "000F737D61747573" | xxd -r -p ;sleep 1)|nc 192.168.137.1 15000|hexdump - ...

  2. Delphi下16进制位图数据转位图

    如果我们在Form中拖入一个Image控件,并设置好picture后,Alt+F12就可以看到Form的源代码中已经将图片转成了16进制字符串,如下: ? 1 2 3 4 5 6 7 8 9 10 1 ...

  3. 太有用了,所以转:Delphi下16进制位图数据转位图

    如果我们在Form中拖入一个Image控件,并设置好picture后,Alt+F12就可以看到Form的源代码中已经将图片转成了16进制字符串,如下: object Image1: TImage Le ...

  4. 【CCS仿真】用matlab把CCS保存的32位16进制的数据转换为十进制的数

    2013-12-04 16:37:28 使用fscanf函数即可完成. 例如,CCS保存的.dat文件Copy_of_forward_i_f.dat如下: 1651 1 81008800 0 4000 ...

  5. QT 串口通信 数据16进制发送

    在QT中进行串口通信时,很多情况要用到发送16进制的数据.从网上找来了一段代码测试能用: static QByteArray QString2Hex(QString str) { QByteArray ...

  6. android 蓝牙编程重点---如何发送和接收16进制数据

    最近的android蓝牙开发项目也逐渐接近尾声,基本的功能都已经完成,只剩下界面的设计.现在真的是舒了一口气! 作为编程学习经验只有1年的菜鸟,这是我独自完成的商业性产品,而且还是涉及到与单片机蓝牙模 ...

  7. C# 16进制与字符串、字节数组之间的转换(串口通讯中)

    1.c#中如何将十进制数的字符串转化成十六进制数的字符串//十进制转二进制 Console.WriteLine("十进制166的二进制表示: "+Convert.ToString( ...

  8. C#串口通讯,16进制与字符串、字节数组之间的转换。

    1.将十进制数的字符串转化成十六进制数的字符串 //十进制转二进制Console.WriteLine("十进制166的二进制表示: "+Convert.ToString(166, ...

  9. 关于QT内部16进制、十进制、QByteArray,QString

    QT里面的数据转化成十六进制比较麻烦,其他的int或者byte等型都有专门的函数,而十六进制没有特定的函数去转化,这我在具体的项目中已经解决(参考网上大神)->小项目程序 QT里面虽然有什么QS ...

随机推荐

  1. 单点登录开源架构之CAS

    服务端 开源地址:https://github.com/apereo/cas Release版:https://github.com/apereo/cas/releases Windows下使用下载c ...

  2. IdentityServer4:IdentityServer4+API+Client+User实践OAuth2.0密码模式(2)

    一.密码模式实操 仍然使用第一节的代码:做如下改动: 1.授权服务端 前面我们使用项目:Practice.IdentityServer作为授权服务器 修改项目的Config.cs类: 添加测试用户,并 ...

  3. ROSETTA使用技巧随笔--Full Atom Representation和Centroid Representation

    Full Atom Representation vs Centroid Representation Full Atom Representation即全原子标识,氨基酸残基的所有相关原子,均原封不 ...

  4. centos make error: fatal error: curses.h: No such file or directory

    yum install ncurses.x86_64 yum install ncurses-devel.x86_64 yum install ncurses-libs.x86_64 yum inst ...

  5. Selenium基础知识(三)元素判断

    一.由于有些页面加载完后,某些元素还没有加载,这样就会导致异常,脚本稳定性变差 为了解决这个问题,selenium提供了WebDriverWait以及implicitly_wait()等待 WebDr ...

  6. python字典对与list对象组合使用小问题

    遇到的低级错误,做个小记录,防止下次在陷进去........ 两行数据,分别每行做为一个字典,存传在list中,但是现在问题来了,第二行的数据会覆盖第一行.结果就是,list存储了的两个元素的数据一样 ...

  7. mybatis运行原理

    mybatis运行原理 运行过程中涉及到的类或者接口 Resources(c) :用于加载mybatis核心配置文件 XMLConfigBuilder(c) :用于解析xml文件(核心配置文件) Co ...

  8. ABC3

    Sql Server http://www.cnblogs.com/sunxi/p/4600152.html http://blog.csdn.net/dmz1981/article/details/ ...

  9. report源码分析——report_object和report_message

    uvm的report机制,主要涉及uvm_report_object,uvm_report_handle,uvm_report_server这三个类: uvm_report_object主要是提供uv ...

  10. <1>lua编译环境 数据类型和局部变量

    1.编译环境 http://www.lua.org/download.html下载 解压后 bin目录中lua.exe运行   luac.exe编译成lua字节码 2.基本数据类型 整数,小数,布尔值 ...