将8位值转换为24位值

2024-05-20 17:32:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我在读ADC值,假设我读对了,我还是个新手,从[NAU7802](14)www.nuvoton.com/resource-files/NAU7802数据表V1.7.pdf0)和我得到的值输出为8位整数(即0-255)作为三个字节。如何将这三个字节合并在一起以得到24位值(0-16777215)的输出?你知道吗

这是我正在使用的代码,如果我假设我做得对的话,我仍然是I2C通信的新手。你知道吗

from smbus2 import SMBus
import time

bus = SMBus(1)
address = 0x2a
bus.write_byte_data(0x2a, 0x00, 6)
data = bus.read_i2c_block_data(0x2a,0x12,3)
print bus.read_i2c_block_data(0x2a,0x12,3)
adc1 = bin(data[2])
adc2 = bin(data[1])
adc3 = bin(data[0])
print adc1
print adc2
print adc3

当我手动转换二进制时,我得到并输出与我输入到adc的内容相对应的内容。 输出:

[128, 136, 136]
0b10001001
0b10001000
0b10000000

Tags: importreaddata字节bini2cblockprint
1条回答
网友
1楼 · 发布于 2024-05-20 17:32:40

试试这个:

data=[128, 136, 136]                                                                                                                                                                              
data[0] + (data[1] << 8) + (data[2] << 16) 
# 8947840

或者

((data[2] << 24) | (data[1] << 16) | (data[0] << 8)) >> 8
# 8947840
(8947840 & 0xFF0000) >> 16                                                                                                                                                                          
#136

(8947840 & 0x00FF00) >> 8
#136

(8947840 & 0x0000FF) 
#128

下面是一个关于打开3个不同号码的示例:

data=[118, 123, 41]                                                                                                                                                                              

c = data[0] + (data[1] << 8) + (data[2] << 16)                                                                                                                                                        
#2718582

(c & 0xFF0000) >> 16                                                                                                                                                                          
#41

(c & 0x00FF00) >> 8                                                                                                                                                                         
#123

(c & 0x0000FF)
#118

相关问题 更多 >