十六进制转ascii码算法

十六进制转ascii码算法,第1张

西门子S7-200PLC早已经停产了,代替他的是Smart,当然S7-1200在一些场合上也是会用于代替200的产品,但是以往的产品还是有很多场合在使用,而且市场上有很多类似的高仿制品在使用着,并且,很多指令方面的应用,也是大同小异,多了解些内容,也有助于后面自己对不同PLC的学习。

今天这里分享的指令是16进制码和ASCII码之间的转换,16进制转换为ASCII码,VB103中如果是FF ,VB2=3 那么从VB130开始的3个字节的ASCII码值为F F 0 ,如果VB2=4 ,那么VB103的开始4个字节的ASCII就是F F 0 0,如下图:

第二个分享的是BCD码与整数之间的转换,以16进制的格式进行写入,比如VW0赋值为256,对应的16进制位16#0100,这时候输出VW4=100,VW8里面的值是多少,VW20里面的值就是多少,但是输出格式是16进制。当然,如果将一个两位数用数码管显示出来,就必须先将转换成BCD码,然后再用段码指令进行输出。

以上的主要还是对指令的熟悉,如果手边有PLC的话,是可以在线监控,这样就更好的理解了,也希望大家有好的学习方法与我进行交流,谢谢!

每个数字+0x30,每个字母+0x37就成了。比如开头五个fad1e:

f的16进制是1111,加0x37即1111+00110111=01000110=0x46;

a的16进制是1010,加0x37即1010+00110111=01000001=0x41;

d的16进制是1101,加0x37即1101+00110111=01000100=0x44;

1的16进制是0001,加0x37即0001+00110111=00110001=0x31;

e的16进制是1110,加0x37即1110+00110111=01000101=0x45。

所以16进制数fad1e的ASCII码就是:46 41 44 31 45。

其他的你就照猫画虎吧……

;将AL寄存器中的一位十六进制数转化成ASCII码,显示输出。

;推荐答案,写的并非是一位。

;程序如下:

ASSUME CS:CODE

CODE SEGMENT

START:

MOV AL, 0FH ;在这里可写 00H~0FH,这就是一位16进制数

AND AL, 0FH ;无用位清零,保留该数字

;下面是变成ASCII码

CMP AL, 0AH

JB NEXT

ADD AL, 07H

NEXT:

ADD AL, 30H

;下面是显示输出

MOV DL, AL ;送到DL

MOV AH, 2 ;显示单个字符

INT 21H ;显示

MOV AH, 4CH ;结束程序

INT 21H ;返回DOS

CODE ENDS

END START

以下程序仅供参考,VB(需自行创建两个文本框):

dim s1 as string,s2 as string,i as integer

s1=text1text

for i=1 to len(s1)

s2=s2 & str(asc(mid(s1,i,1)))

next i

text2text=s2

HASC:MOV A,R0 ;从R0中取一个16进制(二进制)数(0-F)

ANL A,#0FH ;屏蔽掉高4位

PUSH ACC ;4位二进制数入栈

CLR C ;清进(借)位位

SUBB A,#0AH

POP ACC

JC LOOP

ADD A,#07H

LOOP:ADD A,#30H

MOV R2,A

RET

实验结果:R0中的十六进制数(比如A),转换为ASCII码(41H)送入R2中。

补充:之前第一段话说的有问题,所以修改了下,如下:(另外提交的时候没注意,第一个兄弟的回答已经是正确的了^_^)

主要思想是0~9转为对应的ASCII码时加30h,而a,b,c,d,e,f则加37h,比30h多出来的7h就是通过adc(多加了CF的01h)以及daa(多加了06h)实现的。

先说对0~9的,以5为例,

and al,0fh

add al,90h

变为95h

daa

这个时候的daa,由于95h低位高位都小于9,且无进位,所以不变

adc al,40h

95h + 40h + CF = D5h

daa

低位不变,高位大于9,所以加60h,变为35h,且CF = 1

最终结果为35h,即字符5对应的ascii码53

然后是A~F,以C为例:

and al,0fh

add al,90h

变为9Ch

daa

这个时候的daa,先看低位,由于低位是C,大于9,所以加06h,结果变为A2h,再看高位,高位A,大于9,所以加60h,变为02h,CF = 1(有进位)

adc al,40h

adc *** 作,02h + 40h + CF = 43h

daa

此时43h低高位都小于9,所以无变化。最后结果43h,也即C的ASCII码67

请教怎么把16进制字符串转换为Ascii码

使用这个方法可以传进去的16进制的数字组成的字符串转化为utf-8格式的字符串

public static String toStringHex1(String s) {

byte[] baKeyword = new byte[slength() / 2];

for (int i = 0; i < baKeywordlength; i++) {

try {

baKeyword[i] = (byte) (0xff & IntegerparseInt(ssubstring(

i 2, i 2 + 2), 16));

} catch (Exception e) {

eprintStackTrace();

}

}

try {

s = new String(baKeyword, "utf-8");// UTF-16le:Not

} catch (Exception e1) {

e1printStackTrace();

}

return s;

}

以上就是关于十六进制转ascii码算法全部的内容,包括:十六进制转ascii码算法、怎么将16进制转换成ASCII码、汇编语言 编写一个程序,将AL寄存器中的一位十六进制数转化成ASCII码 显示输出等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9403999.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存