1.3 Codesys十六进制数字字符串与字节互转
1、十六进制数字字符串转换成字节,不包含前缀'16#',例如字符串'EE',转换后得数字16#EE(十进制显示为238),具体功能代码如下:FUNCTION strHex_To_Byte : BYTE
VAR_INPUT
InString_Hex : STRING(2);
END_VAR
VAR
byTemp : BYTE;
iIndex : INT;
pbyTemp : POINTER TO BYTE;
END_VAR
pbyTemp := ADR(InString_Hex);
FOR iIndex := 0 TO 1 BY 1 DO
//0-9数字
IF pbyTemp^>=48 AND pbyTemp^<=57 THEN;
byTemp:=pbyTemp^-48;
END_IF;
//大写字母A-E
IF pbyTemp^>=65 AND pbyTemp^<=70 THEN;
byTemp:=pbyTemp^-55;
END_IF;
//小写字母
IF pbyTemp^>=97 AND pbyTemp^<=102 THEN;
byTemp:=pbyTemp^-87;
END_IF;
pbyTemp:=pbyTemp+1;
strHex_To_Byte:=SHL(strHex_To_Byte,4)+byTemp;
END_FOR;测试结果如下
2、字节转换成十六进制数字字符串,数字16#EE(十进制显示为238)转换后得字符串'EE',具体功能代码如下:
FUNCTION Byte_To_strHex : STRING(2)
VAR_INPUT
InByte : BYTE;
END_VAR
VAR
xFlag : BOOL;
byTemp : BYTE;
iIndex : INT;
pbyTemp : POINTER TO BYTE;
END_VAR
pbyTemp := ADR(Byte_To_strHex);
FOR iIndex := 1 TO 0 BY -1 DO
byTemp := SHR(InByte,4*iIndex) AND 16#0F;
IF byTemp>0 THEN
xFlag:=TRUE;
END_IF;
IF xFlag THEN
IF byTemp <= 9 THEN
byTemp := byTemp + 48;
ELSE
byTemp := byTemp + 55; //大写字母
END_IF;
pbyTemp^ := byTemp;
pbyTemp := pbyTemp +1;
END_IF;
END_FOR;
pbyTemp^:= 0;测试结果如下:
经过学习,可以很快轻松完成十六进制数字字符串与字,双字数字的互转功能。其他数字字符串互转链接。
1.1基于Codesys平台的二进制数字字符串与字节互转
1.2基于Codesys平台的八进制数字字符串与字节互转
页:
[1]