程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

从小白到高手:如何理解并应用ASCII数据?

balukai 2025-07-07 14:32:45 文章精选 2 ℃

今天宇宙故障片警给大家带来的知识是如何应用ASCII数据。前段时间A朋友问我,这个汇川AutoShop怎样将这个ASCII的数据转换成浮点数和字符串,因为我之前也没有实际用过这个ASCII数据,我当时告诉A朋友说:“这个我ASCII数据我之前也没有用过,我先研究一下看看怎样能实现。。。。。。”

回到家后,我打开笔记本电脑,首先查了查这个ASCII数据到底是怎么回事,如下表所示

ASCII码对照表(完整:0–127)

Dec

Hex

Bin

Char

描述(说明)

0

00

00000000

NUL

空字符(null)

1

01

00000001

SOH

标题开始

2

02

00000010

STX

正文开始

3

03

00000011

ETX

正文结束

4

04

00000100

EOT

传输结束

5

05

00000101

ENQ

请求

6

06

00000110

ACK

接收确认

7

07

00000111

BEL

响铃

8

08

00001000

BS

退格

9

09

00001001

TAB

水平制表符

10

0A

00001010

LF

换行

11

0B

00001011

VT

垂直制表符

12

0C

00001100

FF

换页

13

0D

00001101

CR

回车

14

0E

00001110

SO

不用切换

15

0F

00001111

SI

启用切换

16

10

00010000

DLE

数据链路转义

17

11

00010001

DC1

设备控制1

18

12

00010010

DC2

设备控制2

19

13

00010011

DC3

设备控制3

20

14

00010100

DC4

设备控制4

21

15

00010101

NAK

拒绝接收

22

16

00010110

SYN

同步

23

17

00010111

ETB

传输块结束

24

18

00011000

CAN

取消

25

19

00011001

EM

介质结束

26

1A

00011010

SUB

替代

27

1B

00011011

ESC

转义

28

1C

00011100

FS

文件分隔符

29

1D

00011101

GS

组分隔符

30

1E

00011110

RS

记录分隔符

31

1F

00011111

US

单元分隔符

32

20

00100000

(空格)

空格

33

21

00100001

!

感叹号

34

22

00100010

"

双引号

35

23

00100011

#

井号

36

24

00100100

$

美元符号

37

25

00100101

%

百分号

38

26

00100110

&

和号

39

27

00100111

'

单引号

40

28

00101000

(

左括号

41

29

00101001

)

右括号

42

2A

00101010

*

星号

43

2B

00101011

+

加号

44

2C

00101100

,

逗号

45

2D

00101101

-

减号

46

2E

00101110

.

句号

47

2F

00101111

/

斜杠

48–57

30–39

00110000–00111001

0–9

数字字符

58

3A

00111010

:

冒号

59

3B

00111011

;

分号

60

3C

00111100

<

小于号

61

3D

00111101

=

等号

62

3E

00111110

>

大于号

63

3F

00111111

?

问号

64

40

01000000

@

at符号

65–90

41–5A

01000001–01011010

A–Z

大写英文字母

91

5B

01011011

[

左中括号

92

5C

01011100

\

反斜杠

93

5D

01011101

]

右中括号

94

5E

01011110

^

抑扬符

95

5F

01011111

_

下划线

96

60

01100000

`

反引号

97–122

61–7A

01100001–01111010

a–z

小写英文字母

123

7B

01111011

{

左大括号

124

7C

01111100

|

竖线

125

7D

01111101

}

右大括号

126

7E

01111110

~

波浪号

127

7F

01111111

DEL

删除

这个表格在网上搜索能看到很多,内容一样,排版有些区别而已。这个表在以前我也看到过,不过受限于当时的能力有限,根本不理解这些数据怎样看,怎样应用的。

通过这个A朋友的提问,这次是个搞定ASCII数据的好时机。于是我一不做二不休,开始研究。可是看这个ASCII数据表格我还是不理解怎么看。进行了下面几个步骤的探索:

1.-不理解的时候,那我就换一个思路,我问A朋友要了一下通讯手册,他是用Easy320跟一个真空表通讯读取真空数值。该真空表的手册如下:

拿到手册后,我仔细研读手册内容,手册中有一个数据案例。通过手册可以看出通讯协议是用的Modbus_Rtu的,然而他的数据格式却是ASCII格式,这个数据格式,一开始我还没明白后,后来才真正明白怎么回事,也就懂了ASCII码数据对照表的内容。我们先看下,这个通讯的4个数据,35H,30H,2DH,31H ;看这几个数据想了一会儿,突然恍然大明白了,这个4个数据是16进制的数据,那个对照表上有16进制的数据,有10进制数据,有2进制数据,还有字符数据,之前一直不理解怎么这么多数据格式。在当时的那一刻,我真的悟了那么一点点。

原来那个ASCII码对照表是4种数据类型对应的不同的数据值,他们都是ASCII数据下不同格式的数值。(这句话是我自己的感悟)

2.-接下来我就开动脑筋,去对比一下ASCII码对照表,我发现35H,30H,2DH,31H,对应的字符值分别是 5,0,-,1 四个字符。 这样就和通讯协议给的案例对应上了,接下来就是找到可以把35H,30H,2DH,31H这四个数据转换成字符串。

于是我打开AutoShop编程软件找到编程软件指令手册,看看有没有哪个指令可以实现把数据转换成字符串的指令。在一番苦苦搜寻后,功夫不负有心人,我找到了一个可以转成字符串的指令。如下图:

手册中说是BYTE数据转换成字符串,那么我们的4个数据属不属于BYTE呢,ASCII数据大小正好是一个BYTE,那么真空表手册中的数据是属于一个BYTE内的,那么这个指令是符合我的要求的。找到后,就实际测试一喽。


3.-如上图的ST指令输入里面,最后的str0的值是50-1,和真空表通讯协议里面的真好是对的上的。到这里我们实现了第一步转成字符串,我们发现和真空表中的手册实际的数据显示还差一些,实际显示5.0e-1; 目前我们的指令输出的字符串只有50-1,还缺少一个点,和e字符。这两个是固定不变的字符,所以我猜测厂家是没有给他传数据了, 如果要显示自己加一下字符串即可。

4.-接下来我们看下如何输出5.0e-1这个字符,缺少一个点,那么我们就找一下这个"点"的字符对应的16进制数据是多少,然后添加上就行了。如下两张图"点"对应的16进制数据是2E, 字符E对应的16进制数据是45


如下图,我在ary0的数据里面添加了6个数据,分别是35H,2E,30H,45H,2DH,31H, 代表的是5.0E-1, 这6个字符。

如下图str0正确输出5.0E-1, 这6个字符。

5.-最后我们在实现将字符串转换成浮点数,这个也是有指令的可以直接转换,这样两个指令组合 应用很简单的实现了,将BYTE转换成字符串,转换成浮点数。如下图使用STRING_TO_REAL这个强制转换命令即可实现字符串转成浮点数数据了。至此我们成功完成了A朋友的需求。

然后我们在看一个5.6E-1转换成浮点数的例子。如下图,变量值和输出值5.6E-1的16进制数据分别是35H,2E,36H,45H,2DH,31H,其中只是把第三个数据的30H换成了36H,根据ASCII对照表,36H代表字符6,转换后是5.6E-1.



以上内容,都是个人的自我理解,欢迎各位朋友互相讨论学习并指出错误地方。

最近发表
标签列表