2017-10-12 2 views
0

私はPythonを初めて使用しており、現在、Raspberry PiのI2Cを使用してデジタルコンパスから2バイトを読み込んでいます。 MSB値およびLSB値は、例えばアレイに格納されている。
a = [0x07, 0xFF]Pythonで2つの16進値を結合する

私は、このようなどのように私はこれをやって行くだろう
b == 0x07FF

として一つの変数にこれらの2バイトに参加したいと思いますか?
私はそれが256でMSBを乗算し、LSBに追加するのと同じくらい簡単だろうと思ったが、私は入れません:この上の任意の助けをいただければ幸いです:)

私を
「はIndexError範囲外のリストインデックスを」コードは次のとおりです。

import smbus 
import time 

bus = smbus.SMBus(1) 

addr = 0x1E 

bus.write_byte_data(addr, 0x00, 0x70) 
bus.write_byte_data(addr, 0x01, 0xA0) 
bus.write_byte_data(addr, 0x02, 0x00) 
time.sleep(0.006) 

for i in range(0,10): 
    x = bus.read_i2c_block_data(addr,0x03,2) 
    y = bus.read_i2c_block_data(addr,0x07,2) 
    z = bus.read_i2c_block_data(addr,0x05,2) 

    xval = 256*x[2]+x[1] 
    print x, y, z 
    print xval 
    time.sleep(1) 
print 'exiting...' 

私が手にエラーがある:コメントで指摘したように

Traceback (most recent call last): 
    File "compass2.py", line 18, in <module> 
    xval = 256*x[2]+x[1] 
IndexError: list index out of range 
+2

Pythonのインデックスは0変更から始まり 'XVAL = 256 * x [2] + x [1] '〜' xval = 256 * x [1] + x [0] ' – eyllanesc

答えて

0

、Pythonで、インデックスは、x[0]で開始し、あなたのコードでは1で、0でない始まりますないx[1]。それらをバック取得するには

def merge(a, b): 
    return 256 * a + b 

:0から255まで2つの整数をマージする

def split(c): 
    return divmod(c, 256) 

テスト:

for a in range(256): 
    for b in range(256): 
     assert (a, b) == split(merge(a, b))