我正在尝试从旧的测量仪器恢复原始数据,该仪器通过打印机端口连接.
例如,仪器软件将生成如下文本输出文件:
S 11/08/08 22:27:58 100 2 U 061
D ___^PR_^_^_]PP_]_^_]_^_____^_^_____^_[_\_\_[_Z_Z_X
D _W_U_T_Q^]^]^Z^V^S^T^S]]]Y]U]R]T]Q]V]Z]\]]^R^]_ZPX
D QSQYQ^RSRYSQSWS\S]SZSWSSSPR\RZRXRTQ^QWQPP[PUPRPQ_^
D _\_]_^_____\_\_Z_X_W_Y_X_X_Z_W_U_V_W_X_[_X_W_W_W
F 2
S 11/08/08 22:35:03 100 2 E 049
D QSQQP_P^QPQPQRQUQUQUQVQZQ[Q\Q]RSR\STSXSWSQR_SQSRR[
D RTQ_QWQUQWQUQZRSSQR]RTRSRQQZQRPZPVPTPTPSPWPTPQPQ_^
D _^_^__PPPPPP__PP__PR__PPPQ_____^_]_]PP_^_]_]_]_Y_^
D ___^_^_\_______^PP__PRPQPPPRPP__PPPP___]_^_^__PP
F 2
Run Code Online (Sandbox Code Playgroud)
"S"线都很好 - 提供测量的适当时间以及其他一些值.
我有兴趣恢复隐藏在"D"行中的任何东西.该软件使用此数据生成绘图,但不提供原始数据.
我详细介绍数据编码的唯一代码包含注释:
/* Packs the 8-bit data into two 7-bit ASCII chars, encoding the channel
* number into it as well, in the format:
*
* 1CCMMMM and 1CCLLLL, where CC = chn, MMMM/LLLL = Most/Least sig nibble
*/
Run Code Online (Sandbox Code Playgroud)
如果它有帮助,我也可以发送实际的包装代码 - 只是尽量保持问题尽可能小.
任何帮助 - 即使是正确方向的一点也将受到赞赏......
编码实际上非常聪明*:两个字母的每个组合(2*8位或2*7位,具体取决于您的看法)是单个测量.评论告诉我们编码是如何工作的.例如,如果我们以'QS'为例:
Pattern: 01CCMMMM 01CCLLLL
Example: 01010001 01010011 = Q S
Channel: ..CC.... ..CC....
..01.... ..01.... = Channel 1
Data: ....0001 ....0011 = 10011 = 19
Run Code Online (Sandbox Code Playgroud)
你只需要取标记为M的位和标记为L的位,将它们放在一起,将整个数据视为单字节数,然后就可以得到原始数据了.相反,提取标记为C的位以获得通道号.
下面是一个如何解析单个测量的示例,假设输入的两个字节位于a和b中:
/* To get the channel, mask with 00110000 = 0x30 then shift */
char channel = (a & 0x30) >> 4;
/* To get data, mask both with 00001111 = 0xF then combine */
char orgdata = ((a & 0xF) << 4) | (b & 0xF);
Run Code Online (Sandbox Code Playgroud)
把所有一起在这里给出了在例如第一"框架"以下数据中,所有的信道1:
我希望这与你在剧情中看到的相符:)
*:我也不是讽刺 - 这种编码将10位有用数据打包到14位可用空间中,同时比base64更简单,可能更快.
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |