蓝色港湾 发表于 2023-9-22 22:24:37

1.2 Codesys八进制数字字符串与字节互转

1、八进制数字字符串转换成字节,不包含前缀'8#',例如字符'177',转换后得数字8#177(10进制显示为127),具体功能代码如下:
FUNCTION StrOct_To_Byte : BYTE
VAR_INPUT
        InString_Octal : STRING(3);
END_VAR
VAR
        pbyTemp : POINTER TO BYTE;
        i: INT;
END_VAR

//8进制数字字符串转换成字节,不包含前缀'8#'
pbyTemp := ADR(InString_Octal);
FOR I := 1 TO Standard.LEN(InString_Octal) BY 1 DO
        IF pbyTemp^ >= 48 AND pbyTemp^ <= 55 THEN
                StrOct_To_Byte := SHL(StrOct_To_Byte,3) + (pbyTemp^ - 48);
        END_IF;
        pbyTemp := pbyTemp + 1;
END_FOR;
测试结果如下


2、字节转换成八进制数字字符串,例如数字8#177(10进制显示为127)转换后为'177',具体功能代码如下:
FUNCTION Byte_To_strOct : STRING(3)
VAR_INPUT
        InByte      : BYTE;
END_VAR
VAR
        xFlag       :BOOL;
        byTemp      : BYTE;
    iIndex      : INT;               
        pbyTemp   : POINTER TO BYTE;
END_VAR

pbyTemp := ADR(Byte_To_strOct);
FOR iIndex := 2 TO 0 BY -1 DO
    byTemp := SHR(InByte,3*iIndex) AND 16#07;
    IF byTemp>0 THEN
          xFlag:=TRUE;       
        END_IF;
        IF xFlag THEN
       byTemp := byTemp + 48;
       pbyTemp^ := byTemp;
       pbyTemp:= pbyTemp +1;       
        END_IF;   
END_FOR;
pbyTemp^:= 0;测试结果如下:


经过学习,可以很快轻松完成八进制数字字符串与字,双字数字的互转功能。
页: [1]
查看完整版本: 1.2 Codesys八进制数字字符串与字节互转