恭喜,你发布的帖子
发布于 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服务器端的程序可能要进一步优化?
请填写推广理由:
分享
只看
楼主