修改发送指令时的编码规则 改为适配中文的

This commit is contained in:
hehaibing-1996
2024-12-27 16:27:00 +08:00
parent ce4a2fbe3a
commit 0bec70f175
7 changed files with 154 additions and 13 deletions

View File

@ -1,6 +1,7 @@
using System;
using System.Collections.Concurrent;
using System.ComponentModel.Design;
using System.Reflection;
using System.Text;
using System.Text.RegularExpressions;
using TouchSocket.Core;
@ -371,31 +372,63 @@ namespace WCS.BLL
public List<byte[]> GenerateMessageList(int boardId, byte[] data, string message)
{
var list = new List<byte[]>();
//去除不满足ASCII的数据
message = Regex.Replace(message, @"[^\u0000-\u007F]+", string.Empty);
//总共发的数据位数
data[1] = Convert.ToByte(message.Length);
//数据发送总帧数
var messageCount = Math.Ceiling((decimal)message.Length / 6);
////去除不满足ASCII的数据
//message = Regex.Replace(message, @"[^\u0000-\u007F]+", string.Empty);
////总共发的数据位数
//data[1] = Convert.ToByte(message.Length);
////数据发送总帧数
//var messageCount = Math.Ceiling((decimal)message.Length / 6);
//for (int i = 0; i < messageCount; i++)
//{
// var tempmessage = string.Empty;
// //不是最后一条指令
// if (i != messageCount - 1)
// {
// tempmessage = message.Substring(i * 6, 6);
// var charArray = tempmessage.ToCharArray();
// for (int index = 0; index < 6; index++)
// {
// data[2 + index] = Convert.ToByte(charArray[index]);
// }
// }
// //最后一条指令
// else
// {
// tempmessage = message.Substring(i * 6, message.Length % 6 == 0 ? 6 : message.Length % 6);
// var charArray = tempmessage.ToCharArray();
// //先把所有数据位置为0
// for (int index = 0; index < 6; index++)
// {
// data[2 + index] = 0x00;
// }
// //有数据的置为对应的数据
// for (int index = 0; index < charArray.Length; index++)
// {
// data[2 + index] = Convert.ToByte(charArray[index]);
// }
// }
// list.Add(GenerateMessage(boardId, data));
//}
//var dataBtyes = Encoding.GetEncoding(936).GetBytes(message);
var dataBtyes = Encode.Encode.GetGb2312(message);
data[1] = Convert.ToByte(dataBtyes.Length);
var messageCount = Math.Ceiling((decimal)dataBtyes.Length / 6);
for (int i = 0; i < messageCount; i++)
{
var tempmessage = string.Empty;
byte[] charArray = dataBtyes.Skip(i * 6).Take(6).ToArray();
//不是最后一条指令
if (i != messageCount - 1)
{
tempmessage = message.Substring(i * 6, 6);
var charArray = tempmessage.ToCharArray();
for (int index = 0; index < 6; index++)
{
data[2 + index] = Convert.ToByte(charArray[index]);
data[2 + index] = charArray[index];
}
}
//最后一条指令
else
{
tempmessage = message.Substring(i * 6, message.Length % 6 == 0 ? 6 : message.Length % 6);
var charArray = tempmessage.ToCharArray();
//先把所有数据位置为0
for (int index = 0; index < 6; index++)
{
@ -404,11 +437,12 @@ namespace WCS.BLL
//有数据的置为对应的数据
for (int index = 0; index < charArray.Length; index++)
{
data[2 + index] = Convert.ToByte(charArray[index]);
data[2 + index] = charArray[index];
}
}
list.Add(GenerateMessage(boardId, data));
}
return list;
}