野火F103霸道串口助手无法显示数组整型常量
引入
这两天有位师弟请教我关于野火F103霸道串口助手无法显示数组整型常量的问题。问题描述如下,首先下图是野火F103霸道串口示例代码主函数,可以看到主函数里向串口发送了字符 ‘A’ 、16进制数0xff56、数组a[10]以及汉字字符
但是在串口助手无法看到数组的值
原因
其实造成这样的原因很简单,是因为当我们不选择16进制显示时,因为串口的显示既能显示中文,又能显示英文字符,所以说明编码方式采用的是Unicode这类通用的编码方式,这里我们就先当作按照UTF-8编码格式对应显示的(具体区别看后文编码格式之间的关系),这是当单个字符时就是ASCII,而现在在串口助手上无法显示数字100、2~10,我们可以选择16进制看看
其实这时我们就可以发现问题所在,查看ASCII码表可以得知,空格代表的ASCII码值为ff,v代表的ASCII码值为56,ASCII码值100刚好为小写d,而数字2~10之所以无法显示是因为其对应字符如下
在ASCII编码中序号0–31的编码值是控制字符(用于控制像打印机等一些外围设备)或通讯专用字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(振铃)等;通讯专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等。通信专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;ASCII值为8、9、10和13分别转换为退格、制表、换行和回车字符。它们并没有特定的图形显示,但会依不同的应用程序而对文本显示有不同的影响。
所以可以得知ASCII码值2~10不会显示在串口助手上。到这里我们就弄清楚了。
关于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编码格式显示,此时数字的值就会被接收端直接当成ASCII码值转化为二进制发给接收方,而字符汉字等会按照UTF-8编码格式翻译为相对应的二进制值传给接收方,接收方按照UTF-8编码格式解码,这样接收端就能显示字符汉字了。而当我们在串口助手输入的数字1、2、3…等数值,实质上输入的是字符。
通过这个问题引出了关于编码相关的一些列知识。