tt99166 发表于 2023-9-22 22:35:52

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]
查看完整版本: 1.3 Codesys十六进制数字字符串与字节互转