回复:OPCUA客户端写入一个包含中文字符串的结构体会报错!

njyjm2006

  • 帖子

    5
  • 精华

    0
  • 被关注

    1

论坛等级:新手

注册时间:2017-06-18

普通 普通 如何晋级?

发布于 2019-01-07 17:16:49

2楼

“一个中文至少占2个字节”,是这个原因导致的,

所以我试图改写这段程序,先判断字符串中是否包含中文字符,如果不包含中文,则使用Convert.ToByte(c),如果包含,则使用 System.Text.Encoding.Default.GetBytes(val[1]);转换为字节数组,字节数组长度也根据包含中文字符的个数相应增加。


                    Array.Copy(BitConverter.GetBytes(LengthOfStringArray(val[1])), 0, bytesToWrite, convertIndex, 4);

                    convertIndex += 4;

                    //判断val[1]中是否包含中文

                    if (HasChinese(val[1]))

                    {

                        byte[] byteArray = System.Text.Encoding.Default.GetBytes(val[1]);//转换包含中文的字符串

                        Array.Copy(byteArray, 0, bytesToWrite, convertIndex, byteArray.Length );

                        convertIndex += byteArray.Length;

                    }

                    else

                    {

                        foreach (Char c in val[1])

                        {

                            bytesToWrite[convertIndex] = Convert.ToByte(c);//此处转英文字符串

                            convertIndex += 1;

                        }

                   

                    }

这一段程序不再出错,但这样会增加数组的长度,粗体部分是原来程序,其余是我增加的代码,

在使用Opc.Ua.Client.cs中的mSession.Write(null, valuesToWrite, out results, out diag);方法时,会报数组越界的错误,我猜测是OPCUA服务器端的程序可能要进一步优化?

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有11153条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。