/// <summary> /// 转换成Buffer /// </summary> internal byte[] DataToBuffer() { //字段 byte[] pFieldBytes = BitConverter.GetBytes((uint)this._eField); //格式 byte[] pFormatBytes = BitConverter.GetBytes((sbyte)this._eFormat); //数据 byte[] pContentBytes; if (this._pContent.GetType() == typeof(DBNull)) { pContentBytes = new byte[] { }; } else { pContentBytes = DataUtilise.DataToBuffer(this._eFormat, this._pContent); } //结果 byte[] pResult = new byte[PacketConstant.MAX_DATAHEAD_SIZE + pContentBytes.Length]; Array.Copy(pFieldBytes, 0, pResult, 0, PacketConstant.MAX_FIELDNAME_SIZE); Array.Copy(pFormatBytes, 0, pResult, PacketConstant.MAX_FIELDNAME_SIZE, PacketConstant.MAX_FIELDFORMAT_SIZE); Array.Copy(pContentBytes, 0, pResult, PacketConstant.MAX_DATAHEAD_SIZE, pContentBytes.Length); return(pResult); }
/// <summary> /// 解析数据 /// </summary> private void BufferToData() { try { //数据流 byte[] pBuffer = null; //解析Data Field pBuffer = new byte[PacketConstant.MAX_FIELDNAME_SIZE]; Array.Copy((byte[])this._pContent, 0, pBuffer, 0, PacketConstant.MAX_FIELDNAME_SIZE); this._eField = (DataField)BitConverter.ToUInt32(pBuffer, 0); //解析Data Format pBuffer = new byte[PacketConstant.MAX_FIELDFORMAT_SIZE]; Array.Copy((byte[])this._pContent, PacketConstant.MAX_FIELDNAME_SIZE, pBuffer, 0, PacketConstant.MAX_FIELDFORMAT_SIZE); this._eFormat = (DataFormat)pBuffer[0]; //解析Data Content pBuffer = new byte[((byte[])this._pContent).Length - PacketConstant.MAX_DATAHEAD_SIZE]; Array.Copy((byte[])this._pContent, PacketConstant.MAX_DATAHEAD_SIZE, pBuffer, 0, pBuffer.Length); if (pBuffer.Length == 0) { this._pContent = DBNull.Value; } else { this._pContent = DataUtilise.BufferToDate(this._eFormat, pBuffer); } } catch (Exception ex) { this._eField = DataField.MESSAGE; this._eFormat = DataFormat.STRING; this._pContent = String.Format("Extract Error : \r\n\a\t{0}", ex.Message); } }