我有4个字节:
Byte_0=0x31
Byte_1=0x32
Byte_2=0x33
Byte_3=0x34
我想要一个word_1=0x1234,其中1是从十六进制到ASCII的转换。有什么办法弄到这个吗?
发布于 2022-09-30 06:00:14
除了前面的建议之外,还有另一种方法可以将字符串转换为整数,将字节转换为字符串。
PROGRAM PLC_PRG
VAR
arBt : ARRAY[1..4] OF BYTE := [16#31, 16#32, 16#33, 16#34];
pstrString : POINTER TO STRING(4);
iInt : INT;
END_VAR
pstrString := ADR(arBt); // now pstrString^ is equal to "1234"
iInt := STRING_TO_INT(pstrString^); // now iInt = 1234 number
END_PROGRAM
如果您有CODESSy2.3,那么删除[16#31, 16#32, 16#33, 16#34]
中的[16#31, 16#32, 16#33, 16#34]
括号。
发布于 2022-09-29 19:31:25
可能有一个内部函数可以将ASCII文本数字转换为其数值,但您可以轻松地自己编写一个:
FUNCTION Ascii_To_Byte : WORD
VAR_INPUT ascii : BYTE
IF ascii>=16#30 AND ascii<=16#39 THEN // range 0-9
Ascii_To_Byte := ascii - 16#30;
ELSIF ascii>=16#41 AND ascii<=16#46 THEN // range A-F
Ascii_To_Byte := ascii - 16#41 + 16#0A;
ELSE
Ascii_To_Byte := -1 // error condition, invalid input
那么,这只是一个转换值和位移位的问题:
word_1 := SHL(Ascii_To_Byte(Byte_0), 12) + SHL(Ascii_To_Byte(Byte_1), 8) + SHL(Ascii_To_Byte(Byte_2), 4) + Ascii_To_Byte(Byte_3)
(用TwinCAT编写的代码在Codesys中可能略有不同。)
https://stackoverflow.com/questions/73892547
复制相似问题