2016-03-29 8 views
0

私は、シリアルから時刻に1バイトを読み込んでリストに格納するPythonコードに取り組んでいます。要素リストを整数に変換して右にシフト

次に、ペイロード長を取得するために2バイトを結合する必要があります。この目標を達成するには、長さのMSB(Most significative byte)とLSB(Least significative byte)を整数に変換してからMSBをシフトする必要があります。 ['H'、 '4'、 'K'、 'M'、 '0'、 '\ x10'、 '\ xff'、 '\ x10'、\ x00 '、' \ x00 ' '\ x02'、 '\ xff'、 '\ xff']。

MSB'\ X02' ANS LSBである '\ X00'(Iは、MSBとLSBの二つの変数でを保存し、私はint型で文字列からint型に変換しようとした

):

payloadLenMSB_h = int(packetHeader[offsetPayloadLenMSB]) 
payloadLenLSB_h = int(packetHeader[offsetPayloadLenLSB]) 

しかし、私はこのエラーが表示されます。

**ValueError: invalid literal for int() with base 10: ''** 

どのようにして長さのMSBとLSBをintに変換できますか?

次は、MSBを8ビット右にシフトし、LSBでコンバインします。

提案がありますか?

これはシリアルからデータを読み込むための私のコードです:

print 'Available data on COM Port: ' + str(availableSerialByte) 
if availableSerialByte > 0: 
    readByte = serialCOM.read(1) 
    print 'Read COM byte:' + str(readByte) 

感謝!

答えて

0

これはそれを行う必要があります。

import struct 
payloadLenMSB_h = struct.unpack('B', packetHeader[offsetPayloadLenMSB])[0] 
payloadLenLSB_h = struct.unpack('B', packetHeader[offsetPayloadLenLSB])[0] 
payloadLen = payloadLenMSB_h << 8 + payloadLenLSB_h 

'B'は、単一のunsigned char型を示し、the struct docsを参照してください。 <<はビット単位シフトを意味します。一度MSBがシフトされると、単純にLSBに追加できます。

+0

ありがとうございました!それはうまくいく! payloadLenMSB_h = ORD(パケットヘッダ[offsetPayloadLenMSB]) payloadLenLSB_h = ORD(パケットヘッダ[offsetPayloadLenLSB]) は正しいですか? – Federico

関連する問題