You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CODESYS中如何正确拼接两个WSTRING类型字符串

CODESYS 两个WSTRING类型字符串拼接实现方案

通过STRING中转拼接的方案确实会丢失非ASCII字符(如中文、多语种特殊符号),不建议使用,可通过以下两种方案实现无编码损失的WSTRING拼接:

方案1:调用内置宽字符专用函数

  • CODESYS 3.5 SP10及以上版本的Standard标准库已经对CONCAT做了WSTRING类型重载,直接传入两个WSTRING类型参数即可完成拼接,无需额外转码。
  • 若当前版本无对应重载,可直接调用库中自带的宽字符专用拼接函数WCONCAT,函数入参为两个WSTRING类型值,返回值为拼接完成的WSTRING结果,全程不会修改字符编码。
    调用示例:
    ws_textOut := WCONCAT("E ", ws_TextIn);
    

方案2:手动内存拷贝实现(全版本兼容)

如果当前运行环境找不到上述内置函数,可基于WSTRING的UTF-16编码特性(每个字符占2字节,以16位0值为字符串终止符),通过内存拷贝实现拼接,无第三方库依赖:

FUNCTION WConcat_Custom : WSTRING(1024) // 返回值长度可根据实际业务需求调整
VAR_INPUT
    wsA: WSTRING;
    wsB: WSTRING;
END_VAR
VAR
    lenA: DINT;
    lenB: DINT;
    pDest: POINTER TO BYTE;
END_VAR
// 计算两个宽字符串的字节长度(不含末尾终止符)
lenA := StrLenW(ADR(wsA)) * 2;
lenB := StrLenW(ADR(wsB)) * 2;

// 拷贝第一个字符串到目标缓冲区
pDest := ADR(WConcat_Custom);
SysMemCpy(pDest, ADR(wsA), lenA);

// 拼接第二个字符串,同步拷贝末尾的2字节终止符
pDest := pDest + lenA;
SysMemCpy(pDest, ADR(wsB), lenB + 2);
  • 上述代码使用的StrLenW、SysMemCpy均为CODESYS默认引用的SysUtils、SysMem标准库函数,所有正式版本均支持。
  • 注意根据业务场景调整返回值WSTRING的预设长度,避免字符串长度超出缓冲区导致内存溢出。

内容的提问来源于stack exchange,提问作者SGKlee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 14:54:38