按索引返回字符串的一个字符的语法

问题描述 投票:0回答:2

我正在尝试比较字符串的一个字符,看是否它是我的分隔符。但是,当我执行以下代码时,变量valstring中的值是一个数字,该数字表示已转换为字符串的字节,而不是字符本身。例如,该值可以是字符串“ 58”。

通过使用调试功能在CoDeSys中进行测试,我知道字符串sReadLine包含有效的字符串。我只是不确定语法中是否只选择其中一个。 sReadLine[valPos + i]部分是我不了解的。

sReadLine : STRING;
valstring : STRING;
i         : INT;
valPos    : INT;

FOR i := 0 TO 20 DO
    IF BYTE_TO_STRING(sReadLine[valPos + i]) = '"' THEN
        EXIT;
    END_IF
    valstring := CONCAT(STR1 := valstring, STR2 := BYTE_TO_STRING(sReadLine[valPos + i]));
END_FOR
plc st codesys
2个回答
0
投票

我认为您有很多选择。

1)改用内置的字符串函数。您可以使用MID函数获取字符串的一部分。因此,在您的情况下,例如“从MID中从valPos + 1中获得一个字符。

sReadLine

2)将ASCII字节转换为字符串。在TwinCAT系统中,有一个功能FOR i := 0 TO 20 DO IF MID(sReadLine, 1, valPos + i) = '"' THEN EXIT; END_IF valstring := CONCAT(STR1 := valstring, STR2 := MID(sReadLine, 1, valPos + i)); END_FOR 。它接受一个ASCII字节并将字符作为字符串返回。我找不到Codesys这样的东西,但我敢肯定某些库中会有解决方案。因此请注意,未经修改,此代码将无法在Codesys中使用:

F_ToCHR

3)F_ToCHR似乎具有CHR_TO_STRING函数。您可以在步骤2中使用它代替F_ToCHR。

4)您可以使用指针将ASCII字节复制到字符串数组(MemCpy)并添加字符串结束字符。这需要一些有关指针等的知识。有关示例,请参见FOR i := 0 TO 20 DO IF F_ToCHR(sReadLine[valPos + i]) = '"' THEN EXIT; END_IF valstring := CONCAT(STR1 := valstring, STR2 := F_ToCHR(sReadLine[valPos + i])); END_FOR

5)您可以自己编写类似于步骤2的帮助函数。检查OSCAT library。该示例未包含所有字符,因此需要更新。不太优雅。


0
投票

当将字节转换为字符串时,将转换为字节的数字表示形式。这意味着您正在将该字节解释为ascii字符(:的ascii十进制值为58)。

因此,如果要转换字符而不是十进制表示形式,则需要另一个函数:

Codesys forum
© www.soinside.com 2019 - 2024. All rights reserved.