2017-10-12 7 views
0

저는 파이썬에 처음 익숙하며 현재 라스베리 파이의 I2C를 사용하여 디지털 나침반에서 2 바이트를 읽습니다. MSB 및 LSB 값은 어레이에 저장된다.
a = [0x07, 0xFF]파이썬에서 두 개의 16 진수 값 합치기

나는 하나 개의 변수로이 두 바이트에 가입 하시겠어요 같은
내가이 일에 대해 어떻게 갈 것이라고 b == 0x07FF

로?
는 나는 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...' 

오류 : 코멘트에 언급 한 바와 같이, 파이썬, 인덱싱 코드에서 1로, 0에 있지 시작

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

파이썬 인덱스에 0에서 시작'의 경우 xval = 256 * x [2] + x [1]'~'xval = 256 * x [1] + x [0]' – eyllanesc

답변

0

, x[0]에서 시작, not x[1]. 그들을 다시 검색 할

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

:

는 0 ~ 255에서 두 개의 정수를 병합하려면

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

테스트 :

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