python – 我可以发送一个2字节大小的变量作为1字节大小的变量吗
我正在进行一些ADC(模数转换)值转换,需要通过UART发送这些值,但由于速度和其他大小限制,我想将它们转换为一个字节大小
ADC为12位,范围为0.0到5.0. 目前我正在将2字节变量拆分为两个单独的字节,并将它们连接回接收器部分 发送(C) // i am trying to send 0xFF8 (4088) which is read from that register send[0] = (VADC_G5RES4.B.RESULT) >> 8 ; send[1] = (VADC_G5RES4.B.RESULT) & 0x0FF; . send[30] = ..... 接收(Python) adc1 = data[3] adc1 = adc1 << 8 | data[4] adc1 = (float(adc1 * 5) / 4096) # gives me 4.990234 as the value 有什么方法可以只用一个字节发送值(可能通过在发送端执行计算) 小数点后只有2位数(4.99)可以 解决方法
如果有一些神奇的方法可以将双字节值填充到一个字节的值中,我们会对所有内容执行此操作,然后我们会再次执行此操作,并且我们将继续执行此操作并将所有内容的大小减半,直到我们推迟将所有世界的信息转换成单个字节.这种魔力是不可能的.
如果你丢弃一半的数据,你可以减少事物的大小,但你说你想要小数点后至少2位数.一个字节只能编码256个不同的值,编码从0.00到9.99的所有值都需要1000个不同的值,因此您仍然无法执行此操作. 更新:有了额外的信息,这些只是12位值,而不是16位,最大值是5.0,我们可以做得更好,但仍然不是8位中的3位有效数字. 首先,我们可以将2个值打包成3个字节,而不是每个值浪费4位.那看起来像 def pack(val1,val2): byte1 = val1 >> 4 byte2 = ((val1 & 0xf) << 4) | (val2 >> 8) byte3 = val2 & 0xff return byte1,byte2,byte3 您可能需要处理尾随的半字节. 如果每个值1.5个字节仍然太多,则存在有损编码选项.例如,我们可以丢弃每个值的4个最低有效位: encoded = val >> 4 并适当解码: decoded = encoded * 5.0 / 256 这保持精度为5/256,或约0.02.其他编码可能会表现得更好,具体取决于您对信号的期望.例如,只要值变化不太快,chux’s solution就会对值进行编码,但当值快速变化时,只有大约0.04的精度. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |