Wenn ich richtig verstehe, versuchen Sie, einen Weg zu finden, um binäre Daten als Python-Bytes-Objekte zu senden, und Hex-Daten als Python-Bytes-Objekte (im zweiten Teil).
es kann Counter intuitiv sein, aber Pythons b''
Syntax steht nicht für binary, but bytes daher warum b'0010101'
funktioniert nicht wie Sie wollen.
Bytes akzeptiert Hex-Daten standardmäßig als Byte, zu diesem Zweck müssen Sie die Hex-Daten als b'\xFF\x04'
formatieren. Zum Beispiel
byte_obj = bytes(b'\xFF\x04')
Dies kann dann über Pyserial gesendet werden. Um eine Binärdatei zu erstellen, müssen Sie die Methoden python int
verwenden, also die int(number, base)
Methode.
Dies wird weiter erklärt here
aber dies kann grundsätzlich über
bin_to_int int('01010101', 2)
byte_obj = bytes([bin_to_int]) #requires array of ints
Leider nur durchgeführt werden, dass für Binärketten der Größe 8 Bits funktioniert (und es wird Ihnen ein Fehler, den Sie so zu sagen) . Um dies zu umgehen, können Sie wie folgt vorgehen:
bin_to_int int('0101010101010101', 2)
# to_bytes takes size in bytes and endianess, which is the order the bytes are placed.
byte_obj = bin_to_int.to_bytes(2, 'little')
Little-Endian ist least significant byte in smallest address (dh Index 0) groß ist gegenüber
der größeren binäre Integer-Methode vorsichtig sein, ich bin nicht sicher was Python intern tut, um binär in eine ganze Zahl zu konvertieren, aber für willkürlich große binäre Daten würde ich vermuten, verlangsamen wegen der Art, wie ich die Umwandlung niavely implementieren würde. Ich gebe Ihnen ein Beispiel dafür, warum, wie ich die binäre Integer ohne Vorzeichen Umwandlung tun würde:
bit_string = "101010101..."
exponent = 0
decimal_value = 0
for bit in bit_string:
decimal_value += int(bit)**exponent
exponent += 1
Es ist vielleicht nicht auf den ersten ganz offensichtlich sein, aber weil Python Ints arbitraily sind so bemessen, schließlich Sie gehen zu bekommen bis zu dem Punkt, an dem Sie sehr große Ints zusammenfügen, außerhalb der typischen arithmetischen Int-Größe (dh größer als 64 Bit).Dies bedeutet, dass im Laufe der Zeit mit großen binären Werten (die Sie wahrscheinlich produzieren werden) Sie nichtlineare Zeitkomplexität erhalten werden, da N die Größe in Bytes der Additionen sowie außerhalb von 64 Bit (und mehr Verarbeitungswille) erhöht muss durchgeführt werden, um die Addition durchzuführen, die O (n_bytes) sein wird)
Um dies zu lösen, müssten Sie nur eine Funktion erstellen, die die binären Werte vor der Konvertierung in Bytes mit trennt sie (wie binary_to_bytes(binary_string)
)
Es ist nicht klar, was Sie versuchen zu tun. Können Sie zeigen, was Sie eingeben möchten und was Sie daraus zu generieren hoffen? –