看了西门子官网视频教学,说:假设VB30-VB32中,存放了3个%ignore_a_1%码,33 45 41 通过转换指令将他们转换为16进制数3E 和16进制数AX, 分别存放在字节VB40 和 VB41中,X表示VB41中低四位的数未发生变化。那么问题来了!!!!
33 45 41 本来就是16进制数啊,它怎么说是3个ASCII 码呢? 3 E A 分别是16进制数33 45 41 对应的‘字符’,视频怎么说是16进制数3E 和16进制数AX? ?? 看着像16进制数转换为ASCII字符, 然而解说怎么说是 ASCII 码 转换为 16进制数??????请教大神
8位二进制数ASCII码00110011 = 16进制数33 这个33是8位二进制ASCII码00110011转换为16进制得到的33, 因此这个叫ASCII转换为16进制数指令,简称ATH指令,输出的OUT是以字符的形式体现对吗? 但是输出OUT为什么是两个字节呢??? 我看到的是 1个ASCII字符占用4位二进制数也就是半个字节。 如果输出的OUT以字符形式体现出来,为什么不直接从8位二进制转换为字符??而是8位二进制数转换为16进制后,再以字符形式体现出来??? 还是 不管8位二进制数转换为10进制 或者16进制 都是以字符的形式表现出来????谢谢,我问的有点多哈。。。。。
图片说明:
最佳答案
这个理解起来没这么复杂,ASCII是一种编码的方式,而16进制只是一个数据的显示格式,两个不是同一个东西。
以你上面说的为例,2个ASCII码,33 45
33对应的字符是3 45对应的字符是E
1、如果用数据类型String显示(忽略第一个表示字符数量的字节),那么就是 ‘3E’
2、如果用BYTE(相当于16进制)显示,那么就是 33 45
那么ATH这个指令,实际的就是将字符解码,用BYTE显示出来,而不需要使用字符串类型才能看到对应的字符。
譬如33,实际上我想表达的是字符3,而不是16进制的16#33。那么,正常来说,我需要用CHAR类型才能看到这个数字代表的意思,但经过ATH转换后,我直接用普通的BYTE类型也能看到这个字符16#3X
(这个有点像解密,解密前是16#33 16#45,解密后(ATH)是16#3E。而3E正是我想传递的内容)
技术文档中也有提到该指令的限制(因为收到16进制的影响,最大到F):有效的 ASCII 输入字符为字母数字字符 0 到 9(十六进制代码值为 30 到 39)以及大写字符 A 到 F(十六进制代码值为 41 到 46)。
提问者对于答案的评价:
谢谢! Thank you!!!
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc361601.html