You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
2.4 KiB
C#

using Microsoft.Extensions.Logging;
using Serilog.Core;
using SlnMesnac.Config;
using SlnMesnac.Model.AirportApiEntity;
using SlnMesnac.TouchSocket.Entity;
using System;
using System.Buffers;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using TouchSocket.Sockets;
namespace SlnMesnac.TouchSocket
{
public class BufferDataAnalysis
{
public static TcpVisionEntity BufferRootAnalysis(byte[] bytes)
{
TcpVisionEntity entity;
//数据校验从起始符开始到数据位按字节求和得出的结果对256求余
int checkDatalength = bytes.Length - 2;
byte checksum = bytes[checkDatalength];
byte[] checkData = new byte[checkDatalength];
Array.Copy(bytes, 0, checkData, 0, checkDatalength);
int sum = 0;
foreach (byte b in checkData)
{
sum += b;
}
int count = sum % 256;
if (count == checksum)
{
entity = new TcpVisionEntity();
entity.Checksum = checksum;
}
else
{
return null;
}
int index = 2;
//取序列号
entity.SN = new byte[2] { bytes[index], bytes[index + 1] };
index += 2;
//取时间戳
entity.Timestamp = new byte[4] { bytes[index], bytes[index + 1], bytes[index + 2], bytes[index + 3] };
index += 4;
//取命令字
entity.Command = bytes[index];
index += 1;
//取数据位长度
entity.DataLength = bytes[index];
index += 1;
//取数据位
byte[] dataBytes = new byte[entity.DataLength];
Array.Copy(bytes, index, dataBytes, 0, entity.DataLength);
entity.DataBytes = dataBytes;
index += entity.DataLength;
return entity;
}
public byte[] DataCombine(byte[] bytes)
{
return null;
}
public static byte[] GetCurrentUnixTimestampAsBytes()
{
// 获取当前的Unix时间戳表示自1970-01-01以来的秒数
int unixTimestamp = (int)(DateTimeOffset.UtcNow.ToUnixTimeSeconds());
// 将时间戳转换为字节数组
byte[] bytes = BitConverter.GetBytes(unixTimestamp);
return bytes;
}
}
}