Python 2.7 Python struct.pack()数据范围错误

Python 2.7 Python struct.pack()数据范围错误,python-2.7,struct.pack,Python 2.7,Struct.pack,我正在使用python2.7,我有这个代码。数据值的范围为0到65792 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

我正在使用python2.7,我有这个代码。数据值的范围为0到65792

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)]):
数据长度=30
代码=202
数据=[5140031400100514003140010051400100]
校验和=0

总数据=['$','M','
SHRT\u MAX
被定义为0x7FFF(32767),因为短路是有符号的:

也许您希望在
struct.pack
中使用未签名的short?
H


编辑:即使这样,最大范围内的值(65792)也会溢出unsigned short——您需要一个更大的容器,如int(
i
)或unsigned int(
i
)来处理这些值
SHRT_MAX
定义为0x7FFF(32767),因为短裤是有符号的:

也许您希望在
struct.pack
中使用未签名的short?
H


编辑:即使这样,最大范围(65792)的值也会溢出unsigned short——您需要一个更大的容器,例如int(
i
)或unsigned int(
i
)使用这些值时,
h
是一个有符号的短字符,其最大正值为32768。
h
是一个无符号的短字符,其最大值为65535。两者都不适合您的最大值。
h
是一个有符号的短字符,其最大正值为32768。
h
是一个无符号的短字符,其最大值为65535。唉签名短片对65792来说太小了。谢谢@tdelaney:D,注意到在我按下postAlas之后,即使是未签名短片对65792来说也太小了。谢谢@tdelaney:D,注意到在我按下post之后
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