擅长:python、mysql、java
<p>如果有什么神奇的方法能把两个字节的值塞进一个字节的值,我们会对所有的东西都这样做,然后再做一次,我们会继续这样做,并不断地将所有的大小减半,直到我们把世界上所有的信息都压缩成一个字节。这样的魔法是不可能的。在</p>
<p>如果你放弃了一半的数据,你可以缩小数据的大小,但你说你希望在小数点后至少有2位数。一个字节只能编码256个不同的值,而从0.00到9.99的所有值都需要1000个不同的值,所以您仍然不能这样做。在</p>
<hr/>
<p><strong>更新</strong>:有了附加信息,这些值只有12位,而不是16位,最大值是5.0,我们可以做得更好,尽管仍然不是8位的3位有效数字。在</p>
<p>首先,我们可以将2个值压缩成3个字节,而不是每个值浪费4位。看起来像是</p>
<pre><code>def pack(val1, val2):
byte1 = val1 >> 4
byte2 = ((val1 & 0xf) << 4) | (val2 >> 8)
byte3 = val2 & 0xff
return byte1, byte2, byte3
</code></pre>
<p>您可能需要处理尾随的半字节。在</p>
<p>如果每个值1.5个字节仍然太多,则存在有损编码选项。例如,我们可以丢弃每个值的4个最低有效位:</p>
^{pr2}$
<p>并适当解码:</p>
<pre><code>decoded = encoded * 5.0 / 256
</code></pre>
<p>这使精度保持在5/256,即0.02左右。其他编码的性能可能更好,这取决于您期望信号的外观。例如,<a href="https://stackoverflow.com/questions/34364741/can-i-send-a-2-byte-size-variable-as-1-byte-size-variable/34365430#34365430">chux's solution</a>只要值变化不太快,<a href="https://stackoverflow.com/questions/34364741/can-i-send-a-2-byte-size-variable-as-1-byte-size-variable/34365430#34365430">chux's solution</a>就对值进行精确编码,但是当值快速变化时,它的精度只有0.04左右。在</p>