【问题标题】:What are the possible ways to encode a counter in a byte?将计数器编码为字节的可能方法是什么?
【发布时间】:2014-07-28 18:29:16
【问题描述】:

我正在对交流遥控器进行逆向工程。当我发送温度值(从 17C 到 30C)时,我得到以下流。

 Temperature - Binary    -  Hex    - Decimal
     17C     - 00000000  -  0x00   - 0
     18C     - 00010000  -  0x10   - 16
     19C     - 00110000  -  0x30   - 48
     20C     - 00100000  -  0x20   - 32
     21C     - 01100000  -  0x60   - 96
     22C     - 01110000  -  0x70   - 112
     23C     - 01010000  -  0x50   - 80
     24C     - 01000000  -  0x40   - 64
     25C     - 11000000  -  0xc0   - 192
     26C     - 11010000  -  0xd0   - 208
     27C     - 10010000  -  0x90   - 144
     28C     - 10000000  -  0x80   - 128
     29C     - 10100000  -  0xa0   - 160
     30C     - 10110000  -  0xb0   - 176

他们可以使用什么方法来编码字节中的温度数据? 有什么方法可以对流进行逆向工程吗?

看起来很明显,他们正在添加 2 的幂,但我无法弄清楚其背后的逻辑。

【问题讨论】:

  • 只是在黑暗中拍摄 - 比较华氏度的值?
  • 看不出 F 有什么帮助,数字没有上升,24C 的编码比 23C 低

标签: algorithm reverse-engineering binary-data


【解决方案1】:

前四位形成一个 4 位 Gray code,因为每两个连续的位序列在一个位置上完全不同:

0000
0001
0011
0010
0110
0111
0101
0100
1100
1101
1001
1000
1010
1011
[1111] (missing, probably 31C)

您的样本没有说明 [17, 31] 范围之外发生的情况。 至于为什么会使用这种模式,Wikipedia provides some examples

格雷码用于位置编码器(线性编码器和旋转编码器),而不是直接的二进制编码。这避免了当角度的二进制表示中的几个位发生变化时,由于某些位先于其他位发生变化而导致误读的可能性。

【讨论】:

  • 谢谢尼克拉斯!这正是我想要的。你每天都会学到新东西。
猜你喜欢
  • 2012-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-08
  • 1970-01-01
相关资源
最近更新 更多