2017-01-21 3 views
0

Ich versuche gerade, einen Fehler in einem Paket zu beheben, das ich entwickle. Das Problem scheint die struct.pack Funktion zu sein, der den Fehler zu werfen:Struct - Argument für 's' muss ein Byte-Objekt sein aber ist bereits ein Byte-Objekt

struct.error: argument for 's' must be a bytes object 

habe ich versucht, Antworten für diesen Fehler auf andere SO beantworten Seiten zu nutzen, aber kann nicht scheinen, etwas zu bekommen zu arbeiten, und der Fehler bleibt bestehen.

Im Folgenden ist eine vereinfachte Version der Eingänge I durch das Paket mit als Ausgabe zu tun haben, die den Fehler repliziert:

import struct 

second_arg = b'LASF_Projection\x00' 

print(type(second_arg)) 
struct.pack("<ssssssssssssssss", *second_arg) 

Dies resultiert in der Ausgabe:

<class 'bytes'> 
Traceback (most recent call last): 
    File "C:/pyfor/anothersandbox.py", line 7, in <module> 
    struct.pack(b"<ssssssssssssssss", *second_arg) 
struct.error: argument for 's' must be a bytes object 

Mein Verdacht ist, dass * second_arg beim Entpacken nicht mehr im Byte-Format vorliegt und den Fehler auslöst. Ist dieser Verdacht richtig, und wenn ja, ist es möglich, die entpackten Teile von second_arg im laufenden Betrieb in Byte-Format umzuwandeln?

+1

Wenn Sie 'bytes' entpacken, erhalten Sie' int', genauso wie beim iterieren von 'bytes'. – ShadowRanger

+0

Welches Ergebnis erwarten Sie für diese Daten? Wie wäre es mit 'pack (" <16s ", second_arg)' aber es gibt das gleiche 'b'LASF_Projection \ x00'' – furas

Antwort

0

Ihr Verdacht ist richtig. Ein Byte ist eine Sequenz von Ints im Bereich (256). In 3.6:

>>> [*b'LASF_Projection\x00'] 
[76, 65, 83, 70, 95, 80, 114, 111, 106, 101, 99, 116, 105, 111, 110, 0] 

Diese Ints sind, was Sie passieren.

Verwandte Themen