gpt4 book ai didi

c - 从老式测量仪器解码数据

转载 作者:太空狗 更新时间:2023-10-29 16:12:32 24 4
gpt4 key购买 nike

我正在尝试从通过打印机端口连接的旧测量仪器恢复原始数据。

例如,仪器软件将生成如下文本输出文件:

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

“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
*/

如果有帮助,我也可以发送实际的包装代码 - 只是想保持问题越小越好。

任何帮助 - 即使是正确方向的一点也将不胜感激......

最佳答案

编码实际上非常巧妙*:两个字母的每个组合(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

您只需取出标记为 M 的位和标记为 L 的位,将它们放在一起,将整个事情视为一个单字节数字,您就得到了原始数据。反之,提取标有C的位,得到 channel 号。

这是一个如何解析单个测量值的示例,假设输入的两个字节位于 ab 中:

  /* 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);

将所有这些放在一起 here为示例中的第一个“帧”提供以下数据,所有数据都在 channel 1 上:

我希望这与您在情节中看到的相符:)

*:我也不是在讽刺 - 这种编码将 10 位有用数据打包到 14 位可用空间中,同时比 base64 之类的东西简单得多,而且可能更快。

关于c - 从老式测量仪器解码数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22390873/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com