2016-12-20 2 views
0

Ich benutze Python 2.7. Ich verstehe nicht, warum das nicht funktioniert, könnte mir bitte jemand einen Hinweis geben.Python-Fehler: Entpacken erfordert ein String-Argument der Länge 4, aber es ist?

>>> from struct import unpack 
>>> T2 = u'\xb6'+u'\x01'+u'\x59'+u'\x59' 
>>> T2 
u'\xb6\x01YY' 
>>> unpack('i', TS) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
struct.error: unpack requires a string argument of length 4 

Ich dachte, ich bin ein String-Argument von 4?

Der Grund, warum ich Unicode verwendet habe, ist, dass ich versuche, die Daten aus dieser URL zu extrahieren i gesendet ist zu werden:

path="/write/?type=stxetx&packet=AX%05YX%01%00%00%00%00%00%00%02%00%A0%00%05%00%C8%00%C0%0D%28%28%00%00%E85&localpackettime=2016-12-20+09%3A18%3A57&serial=868324023356343&packettime=2016-12-20+09%3A18%3A57&receivetime=2016-12-20+09%3A18%3A58&timezone=UTC" 

Dies ist der Code Ich verwende die Paketdaten zu erhalten:

packet_data = request.GET.getlist('packet')                                         
    data_list = list(packet_data[0])                                            
    print "Data list ",data_list 

das gibt mir eine Unicode-Liste wie folgt aus:

>> Data list [u'A', u'v', u'\x05', u'Y', u'X', u'\x01', u'\x00', u'\x00', u'\x00', u'\x00', u'\x00', u'\x00', u'\x02', u'\x00', u'\xa0', u'\x00', u'\x05', u'\x00', u'\xc8', u'\x00', u'\xc0', u'\r', u'(', u'(', u'\x00', u'\x00', u'\xe8', u'5'] 

data_list[1:5] make up einen 4 Byte int Zeitstempel und der einzige Weg war, dass an einem Punkt zu arbeiten war, die Werte zu entpacken, aber es wirft diesen Fehler.

Sollte ich den Unicode vor dem Entpacken dekodieren/kodieren?

+0

Warum haben Sie einen Unicode-String in erster Linie? Das ist kein Text, das sind binäre Daten, die du hast. –

+0

Beachten Sie, dass python3 diese Fehlermeldung verdeutlicht: 'Ein Byte-ähnliches Objekt wird benötigt, nicht 'str''. –

+0

Ich habe meine Frage richtig als neue Frage gestellt, da es jetzt verwirrend ist, danke für deine Hilfe - [link] (http://stackoverflow.com/questions/41246696/how-to-unpack-stxetx-data-in- Python) –

Antwort

1

Sie können Unicode-Text nicht entpacken. Sie würden Binärdaten auspacken. Der Fehler besagt, dass Sie den falschen Objekttyp übergeben haben. Sie würden den gleichen Fehler, wenn man in einem leer Unicode-String übergeben:

>>> struct.unpack('i', u'') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
struct.error: unpack requires a string argument of length 4 

Verwenden Sie Unicode nicht:

>>> struct.unpack('i', '\xb6\x01YY') 
(1499005366,) 
+0

Was bedeutet, dass es binär ist? – MYGz

+0

@MohammadYusufGhazi: In Python 2 ist der Standardtyp "str" ​​eine Binärzeichenfolge. –

+0

@MohammadYusufGhazi: und wenn Sie Daten als integer interpretieren möchten, ist es kein Text. Es sind binäre Daten. Text codiert keinen 4-Byte-Ganzzahlwert mit Vorzeichen in 4 Byte. –

Verwandte Themen