问题描述
在线程中自定义通信协议,要求协议将串口数据以十六进制发出,服务端将其序列化后发给客户端,客户端将其反序列化,按照自定义协议接收,将其按两个数字为一个属性分隔出来。例如串口数据:0101000000000000FFFFFFFF.客户端解析以后是0101000000000000FFFFFFFF共十二个字节。谁有这方面的代码。报文发送方式跟分隔流如何操作。急急
解决方案
解决方案二:
改出来一个,还没试,你看看就是把字符串转化16进制数据存入数组,然后串口发送即可。'把字符串转化为字节发送Functionstrtobyte(ByValstrAsString)AsByteDimi,jAsByteDimtempAsStringDimlAsIntegerDimdata()AsByteDimcrcH,crcLAsByteDimb()AsBytej=0str=Replace(str,"","")l=Len(str)/2ReDimb(l-1)Fori=0Tol-1Ifj<2*lThenb(i)=Val("&h"&Mid(str,j+1,2))EndIfj=j+2NextIfMe.COM2.IsOpenThenMe.COM1.DiscardOutBuffer()Me.COM1.Write(b,0,l)ElseMsgBox("串口出错",,"串口错误")EndIfReturn1EndFunction
解决方案三:
没看出来有任何地方需要序列化反序列化串口数据是byte[]数组TCP数据包也是byte[]数组直接发送不就得了?
解决方案四:
至于每2个byte作为一个数据循环里处理一下不就得了,很难吗
解决方案五:
PublicFunctionByteArrayToHexString(ByValdataAsByte())AsStringDimbuilderAsNewStringBuilder((data.Length*3))DimnumAsByteForEachnumIndatabuilder.Append(Convert.ToString(num,&H10).PadLeft(2,"0"c).PadRight(3,""c))NextReturnbuilder.ToString.ToUpper'C000A6A2A4B2AA6260848E708A94A8EEAE92888A624062AE92888A64406303F060704A2D6C2A674B5C3E3D0DC0EndFunction