2017-03-24 200 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'是一個有符號短路,其最大正值爲32768.'H'是一個無符號短路,其最大值爲65535。 – tdelaney

回答

1

SHRT_MAX定義爲0x7FFF的(32767),因空頭簽署:https://en.wikibooks.org/wiki/C_Programming/C_Reference/limits.h

也許你想無符號的短? Hstruct.packhttps://docs.python.org/2/library/struct.html#format-characters

編輯:即使是這樣,在你的最大範圍(65792)的值會溢出符號短 - 你需要一個更大的容器,如int(i)或unsigned int類型(I)工作與這些值

+0

唉,即使是無符號的短小也是65792的小數。 – tdelaney

+0

感謝@tdelaney:D,注意到在我按下帖子後 –