using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace B3DealerClient.Control
|
|
{
|
|
internal class Xk3124DataFormat : DataFormatBase
|
|
{
|
|
public override int DataLength
|
|
{
|
|
get { return 17; }
|
|
}
|
|
|
|
public override char Beginchar
|
|
{
|
|
get { return (char)0x02; }
|
|
}
|
|
|
|
public override char Endchar
|
|
{
|
|
get { return (char)0x0D; ; }
|
|
}
|
|
|
|
public override short Bufsize
|
|
{
|
|
get { return 36; }
|
|
}
|
|
|
|
public override string ParseData(string buf, out bool isStatic)
|
|
{
|
|
StringBuilder str = new StringBuilder();
|
|
|
|
char swa = buf[1]; // 状态字A
|
|
char swb = buf[2]; // 状态字B
|
|
|
|
int dotIndex = (swa & 0x07) - 2; // 小数点位置
|
|
|
|
bool isPositive = (((swb >> 1) & 0x01) == 0); // 符号:是否为正数
|
|
isStatic = (((swb >> 3) & 0x01) == 0);
|
|
|
|
char[] num = new char[6];
|
|
|
|
for (int i = 0; i < 6; i++)
|
|
{
|
|
num[i] = buf[i + 4];
|
|
}
|
|
|
|
if (dotIndex < 0)
|
|
{ // 不考虑精确到十,百位
|
|
return str.ToString();
|
|
}
|
|
|
|
for (int i = 0; i < 6 - dotIndex; i++)
|
|
{
|
|
str.Append(num[i]);
|
|
}
|
|
|
|
str.Append('.');
|
|
|
|
for (int i = 0; i < dotIndex; i++)
|
|
{
|
|
str.Append(num[6 - dotIndex + i]);
|
|
}
|
|
|
|
// 去掉空格
|
|
string result = str.ToString().Trim();
|
|
|
|
// 取消前面多余的0
|
|
for (int i = 0; i < result.Length; i++)
|
|
{
|
|
if (result[i] != '0')
|
|
{
|
|
result = result.Substring(i, result.Length - i);
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (result.IndexOf('.') == 0)
|
|
{
|
|
result = result.Insert(0, "0");
|
|
}
|
|
|
|
if (result.IndexOf('.') == result.Length - 1)
|
|
{
|
|
result = result.Remove(result.IndexOf('.'), 1);
|
|
}
|
|
|
|
if (!isPositive)
|
|
{ // 负数
|
|
result = result.Insert(0, "-");
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
public override bool ParseAscii(string buf, out string weight, out bool isStatic)
|
|
{
|
|
isStatic = false;
|
|
weight = FindDataFrame(buf, DataLength);
|
|
|
|
if (string.IsNullOrEmpty(weight))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
weight = ParseData(weight, out isStatic);
|
|
|
|
return true;
|
|
}
|
|
|
|
public override bool ParseAscii(string buf, out string weight, out bool isStatic, out string subStr)
|
|
{
|
|
weight = "";
|
|
isStatic = false;
|
|
subStr = "";
|
|
return false;
|
|
}
|
|
}
|
|
}
|