首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将十六进制字节转换为ASCII字符串(Codesys)?

将十六进制字节转换为ASCII字符串(Codesys)?
EN

Stack Overflow用户
提问于 2022-09-29 08:30:45
回答 2查看 243关注 0票数 0

我有4个字节:

代码语言:javascript
运行
复制
Byte_0=0x31
Byte_1=0x32
Byte_2=0x33
Byte_3=0x34

我想要一个word_1=0x1234,其中1是从十六进制到ASCII的转换。有什么办法弄到这个吗?

EN

回答 2

Stack Overflow用户

发布于 2022-09-30 06:00:14

除了前面的建议之外,还有另一种方法可以将字符串转换为整数,将字节转换为字符串。

代码语言:javascript
运行
复制
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]括号。

票数 2
EN

Stack Overflow用户

发布于 2022-09-29 19:31:25

可能有一个内部函数可以将ASCII文本数字转换为其数值,但您可以轻松地自己编写一个:

代码语言:javascript
运行
复制
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

那么,这只是一个转换值和位移位的问题:

代码语言:javascript
运行
复制
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中可能略有不同。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73892547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档