2017-03-24 11 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

おそらく、あなたがしたいです署名のない短い? struct.packHhttps://docs.python.org/2/library/struct.html#format-characters

EDIT:その後も、あなたの最大範囲(65792)の値が符号なしshortをオーバーフローします - あなたは仕事に、このようなint型(i)またはunsigned int型のような大きなコンテナ(I)が必要になりますそれらの値は

+0

悲しいかな、署名のない短いものも65792では小さすぎます。 – tdelaney

+0

ありがとう@tdelaney:D、ポストを押した直後に気づいた –