情况是,在我的工作地点,我们有一个呼叫数据记录器(CDR)通过串口将数据输入服务器。据我了解,这里的好数据是所有电话的记录,这当然与钱的支出有关。
据我了解,服务器上的串口设置为接受9600波特,8位,无奇偶校验,1个停止位的数据;它旨在被设置为接受9600波特,7位,无奇偶校验,1个停止位的数据。
虽然现在已经纠正了这个设置,但CDR中存在大量数据,这些数据目前无法理解,尽管这些文件通常可以像记事本一样简单。
我的问题是A.是否有可能恢复可读数据,以及B.如何实现这一目标(就C#而言,这将是理想的,但不是必需的)。我曾经想过将数据直接解码到比特并重新编码成可读格式,但我已经意识到我不确定所涉及的实际格式(例如,我的有限研究使我相信7位,无奇偶校验,1位停止位,数据将被视为“真正的ASCII”,但我不确定其有效性。)
许多先前提出的问题都涉及代码中的串口处理。我想我想知道我是否可以将这些接收到的数据翻译成可读格式。
答案 0 :(得分:1)
我认为没有办法恢复数据:服务器上的UART可能已检测到很多“帧错误”,因此至少放弃了某些硬件级别的数据已经存在。
但是,您可能需要查看串行线路上的帧格式(例如here)。它没有任何复杂,但是w.r.t.我看到的挑战是你的问题:
每帧包含一个起始位,然后是n个数据位,可选择一个奇偶校验位,然后是一个或多个停止位。
因此,当UART需要8位帧和时,每帧之后只发送一个停止位,它将不同步:
由于起始位是逻辑0,而停止位是逻辑1,UART将在大多数帧中检测到帧错误,并且可能会或可能不会向应用程序提供“损坏”帧的数据。
但是,在任何情况下,接收器都会将一些实际数据位解释为控制位,即开始位或停止位,这些位肯定会在之后丢失。
如果发送方已配置为每帧发送至少两个停止位,则只需修剪第8个“数据”位即可轻松恢复接收到的数据,这实际上是第一站-bit发送,因此总是为1。