2017-03-24 4 views
0

python2.7을 사용하고 있는데이 코드가 있습니다. 데이터 값은 0에서 65792.Python struct.pack() 데이터 범위 오류

data_length=30 
code=202 
data=[51400,31400,100,51400,31400,100,51400,31400,100] 
checksum = 0 
total_data = ['$', 'M', '<', data_length, code] + data 
for i in struct.pack('<2B%dh' % len(data), *total_data[3:len(total_data)]): 
    checksum = checksum^ord(i) 
total_data.append(checksum) 
try: 
    b = None 
    b = self.ser.write(struct.pack('<3c2B%dhB' % len(data), *total_data)) 
except Exception, error: 
    print "\n\nError in sendCMD." 
    print "("+str(error)+")\n\n" 
    pass 

struct.pack('<2B%dh' % len(data), *total_data[3:len(total_data)]): 

에 범위이며, 나에게이 오류 제공 : 반바지 서명으로

for i in struct.pack('<2B%dh' % len(data), *total_data[3:len(total_data)]): 
struct.error: short format requires SHRT_MIN <= number <= SHRT_MAX 
+0

입니다.'h'는 부호있는 short 값이고 최대 양의 값은 32768입니다.'H'는 부호없는 short이고 최대 값은 65535입니다. – tdelaney

답변

1

SHRT_MAX가에서 0x7FFF (32767)으로 정의된다 : https://en.wikibooks.org/wiki/C_Programming/C_Reference/limits.h

을 아마도 당신이 원하는 서명되지 않은 짧은? Hstruct.pack에서 : https://docs.python.org/2/library/struct.html#format-characters

편집 : 그렇다하더라도, 최대 범위 (65792)의 값이 오버플로 서명되지 않은 짧은 - 당신은 INT (i) 또는 부호없는 INT (I) 작업으로 더 큰 용기가 필요합니다 그 값들은

+0

아아, 심지어 서명되지 않은 짧은 것은 65792에 비해 너무 작습니다. – tdelaney

+0

감사합니다. @tdelaney : D, 내가 게시물을 누른 직후에 나타났습니다. –