using System; using System.Buffers; using System.Collections.Generic; using System.Globalization; using System.Text; namespace JT809.Protocol.JT809Extensions { public static partial class JT809BinaryExtensions { public static string ReadBCDLittle(ReadOnlySpan buf, ref int offset, int len) { StringBuilder bcdSb = new StringBuilder(len*2); for(int i = 0; i < len; i++) { bcdSb.Append(buf[offset + i].ToString("X2")); } offset = offset + len; return bcdSb.ToString(); } public static int WriteBCDLittle(IMemoryOwner memoryOwner, int offset, string data,int len) { string bcdText = data == null ? "" : data; byte[] bytes = new byte[len]; int startIndex = 0; int noOfZero = len * 2 - bcdText.Length; if (noOfZero > 0) { bcdText = bcdText.Insert(startIndex, new string('0', noOfZero)); } int byteIndex = 0; while (startIndex < bcdText.Length && byteIndex < len) { memoryOwner.Memory.Span[startIndex + offset] = Convert.ToByte(bcdText.Substring(startIndex, 2), 16); startIndex += 2; byteIndex++; } return len; } } }