蓝色港湾 发表于 2023-9-22 22:05:42

1.1 Codesys二进制数字字符串与字节互转

1、二进制数字字符串转换成字节,不包含前缀'2#',例如字符'11110000',转换后得数字2#11110000,功能代码如下:
FUNCTION StrBin_To_Byte : BYTE
VAR_INPUT
        InString_Binary : STRING(8);      //二进制字符
END_VAR
VAR
        pbyTemp         : POINTER TO BYTE;
        iIndex          : INT;       
END_VAR

//2进制数字字符转换成字节,不包含前缀'2#',例如字符'11110000',转换后得数字2#11110000
pbyTemp := ADR(InString_Binary);
FOR iIndex := 1 TO 8 BY 1 DO
    IF pbyTemp^<48 OR pbyTemp^>49 THEN
           EXIT;                     //实际字符长度小于8
        ELSIF pbyTemp^ = 48 THEN   //0字符
                StrBin_To_Byte := SHL(StrBin_To_Byte,1);
        ELSIF pbyTemp^ = 49 THEN   //1字符
                StrBin_To_Byte := SHL(StrBin_To_Byte,1)+1;
        END_IF;
        pbyTemp := pbyTemp + 1;
END_FOR;运行测试结果如下:


2、字节转换成二进制数字字符串,不包含前缀'2#'例如数字2#11110000,转换后得字符'11110000',功能代码如下:
FUNCTION Byte_To_strBin : STRING(8)
VAR_INPUT
        InByData    : BYTE;
END_VAR
VAR
        iIndex      : INT;       
        pbyTemp   : POINTER TO BYTE;
END_VAR

//例如数字2#11110000,转换后得字符'11110000'
pbyTemp := ADR(Byte_To_strBin);
FOR iIndex := 7 TO 0 BY -1 DO
        pbyTemp^ := (SHR(InByData,iIndex) AND 16#01) + 48;
        pbyTemp := pbyTemp + 1;
END_FOR;
pbyTemp^ := 0;运行测试结果如下:


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