首先,我现在所做的事情:
我用9位协议嗅探asyncron串行总线并将数据发送到PC。在PC端,我将数据作为无限字符串接收,如下所示:.12_80E886.02_80E894.13。 PC端的软件使用带有C#的winforms编写。现在我遇到的问题是我没有明确的开始你可以在流示例中看到它。原因是,我在协议的某处开始嗅探。
我想做什么:
我想我可以使用startindex = IndexOf("_")
,并将它们设置为新的开始。我必须在流构建的流中评估sign:_(以毫秒为单位的时间戳)。(addressbyte databyte)。我想在RichTextBox中显示的唯一内容是databyte,我还需要一个时间戳的数据管理方法。因为我在GUI中有两个或更多databyte之间可以看到时间的功能,因为我认为我创建了一个sql数据库。地址字节需要我用一个特殊的collor中的一个作为地址来对该字节进行collor。
问题:
如何评估流,以便我交替加时间戳, addressbyte和databyte作为单个子字符串?
我之所以想要它们,是因为,我认为我可以制作一个简单的if elseif else块来实现我想要做的所有事情。
如果有人对我的项目有更好的建议,请将其写为评论。
带着友好的祝福嗅探
答案 0 :(得分:0)
我认为字符串是不好的选择。适当的数据以字节形式发送。嗅闻而不是字符串。您需要协议描述才能理解数据。 您需要从总线读取字节并解释它。
答案 1 :(得分:0)
我认为你正试图同时解决两个问题。将它们分开并单独解决它们会更好。
存在传输数据的问题,因此您正在使用流。这是一个有效的解决方案。通过流发送和接收数据(比特)。
您遇到将这些位(接收后)转换为实际对象(日期,字符串等)的问题。为此,您可以使用简单的解析器,标记器,本地脚本,可以从数据中获取正确的部分并进行转换,或者您可以使用序列化框架(如DataContracts)。
如果你有简单的数据,我会选择使用一种可以解析数据的方法。对于更复杂的场景,我会研究序列化。
此外,您还需要验证输入,因为您无法假设总是有一个可信的(未受损害的)软件正在向您发送这些位。