关于野火F103霸道串口助手无法显示数组整型常量的深入思考

野火F103霸道串口助手无法显示数组整型常量

引入

这两天有位师弟请教我关于野火F103霸道串口助手无法显示数组整型常量的问题。问题描述如下,首先下图是野火F103霸道串口示例代码主函数,可以看到主函数里向串口发送了字符 ‘A’ 、16进制数0xff56、数组a[10]以及汉字字符
在这里插入图片描述
但是在串口助手无法看到数组的值在这里插入图片描述

原因

其实造成这样的原因很简单,是因为当我们不选择16进制显示时,显示的是按照编码方式解码后的信息,也即选择了HEX(文本显示)。那为什么按照编码方式解码后不能显示发送方发过来的数组里的整型值呢,下面我们先搞清楚这是什么编码方式。

因为串口的显示既能显示中文汉字,又能显示英文字符,所以说明编码方式采用的是Unicode这类通用的编码方式,这里我们就先当作按照UTF-8编码格式对应显示的(具体区别看后文编码格式之间的关系),现在我们搞清了编码方式是什么,在这种编码方式下,当是单个字符时其实UTF-8编码就是等于ASCII编码(原因看后文编码格式之间的关系),而现在在串口助手上无法显示数字100、2~10,我们可以选择16进制看看。
在这里插入图片描述
其实这时我们就可以发现问题所在,查看ASCII码表可以得知,A代表的ASCII码值为0x41(十进制65),空格代表的ASCII码值为0xff(十进制255),大写V代表的ASCII码值为0x56(十进制86),小写d代表的ASCII码值为0x56(十进制100),而数字2~10之所以无法显示是因为其对应字符如下:
在这里插入图片描述
在这里插入图片描述
在ASCII编码中序号0–31的编码值是控制字符(用于控制像打印机等一些外围设备)或通讯专用字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(振铃)等;通讯专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等。通信专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;ASCII值为8、9、10和13分别转换为退格、制表、换行和回车字符。它们并没有特定的图形显示,但会依不同的应用程序而对文本显示有不同的影响。
在这里插入图片描述
所以很明显问题的根源就是把串口助手的ASCII(十六进制显示)和HEX(文本显示)搞混了。可以从上面表里得知ASCII码值2~10在选择HEX(文本显示)下不会显示在串口助手上。到这里我们就弄清楚了。

关于ASCII和UTF-8

  • ANSI并不是某一种特定的字符编码,而是在不同的系统中,ANSI表示不同的编码。
  • Unicode,又称统一码、万国码、单一码,是计算机科学领域里的一项业界标准,包括字符集、编码方案等。UTF8、UTF16、UTF32是Unicode的不同编码实现方案。
  • ASCII编码是美国制定的编码标准,它可以代表英文中的字符集合,但用来表示其他语言 如汉语、法语等是不够用的。中国为了让计算机识别汉语,制定了GB2312编码规范,使用两个字节代表一个汉字,支持65536个汉字。

ANSI是什么编码
Unicode UTF-8 UTF-16 UTF-32的关系
一文带你弄懂C++中的ANSI、Unicode和UTF8三种字符编码
在这里插入图片描述
在这里插入图片描述

总结

通过这个问题引出了关于编码相关的一系列知识。当串口直接发送数值时,此时数值就会被接收端直接当成编码值发送,而字符汉字等会按照UTF-8编码格式翻译为相对应的值发送,接收方按照UTF-8编码格式解码,这样接收端就能显示字符汉字了。

通常串口助手会有ASCII(十六进制显示)和HEX(文本显示)两种
在这里插入图片描述
在这里插入图片描述
当选择HEX(文本显示)时,我们在串口助手输入1、2、3…等数字,实质上发送的是字符’1’、‘2’、‘3’ …

当选择ASCII(十六进制显示)时,我们在串口助手输入1、2、3…等数字,实质上发送的是ASCII码的十六进制数值0x01、0x02、0x03 …,其中0x代表16进制,不会在串口调试助手上显示出来,只会显示01,02,03 …

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只嵌入式爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值