[Python] Change signed int to unsigned int

깨미·2021년 11월 17일
0

Python

목록 보기
8/10
post-custom-banner

에러

ValueError: byte must be in range(0, 256)

checksum 계산을 한 후, bytearray에 담으니 생긴 에러이다.

원인

def onSetting(data):
    checksum = 4+data['type']+data['param']
    checksum = ~checksum
    
    buf = [0x55, 0xAA, 0x04, data['type'], data['param'], checksum]
    byteBuff = bytearray(buf)

checksum이 byte의 range에서 벗어나기 때문이다. 저 checksum을 print하면 -16이 나오는데 이를 240으로 즉, unsigned int로 변경해야 한다.

해결 방법

python에서는 따로 unsigned형 int가 없다고 한다.
그래서 비트 계산으로 변환 시켜 주면 된다.
checksum은 1byte int이기 때문에 0xff 만큼 and 연산을 해줬다.

def onSetting(data):
    checksum = 4+data['type']+data['param']
    checksum = ~checksum
    checksum = checksum & 0xff
    buf = [0x55, 0xAA, 0x04, data['type'], data['param'], checksum]
    byteBuff = bytearray(buf)
profile
vis ta vie
post-custom-banner

0개의 댓글