Seite 1 von 1
Zweierkomplement
Verfasst: Freitag 31. März 2023, 13:31
von KolbenKeule
Hallo,
ich bin neu hier und hoffe das ich auf diesem Weg etwas Hilfe bekommen kann bzw. später auch geben kann
Ich habe ein großes Problem mit einer Datenauswertung. Ich muss 4 Bytes mittels Zweierkomplement umrechnen und suche dafür schon seid mehreren Tagen im Netz nach einer Lösung.
Ich hoffe mir kann von ein paar Experten weiter geholfen werden.
Meine Datenausgabe sieht wie folgt aus:
ich benötige die letzten 4 Bytes für meine Formel und da die Übertragung bzw. der Empfang per Netzwerk kommt ist die Struktur BIG Endian.
Vielen Dank schonmal für die Hilfe.
Beste Grüße
Re: Zweierkomplement
Verfasst: Freitag 31. März 2023, 13:57
von __deets__
Schau dir das Modul struct an, damit ist das trivial.
Re: Zweierkomplement
Verfasst: Donnerstag 6. April 2023, 08:52
von KolbenKeule
Vielen Dank für die schnelle Antwort, ich habe mich jetzt damit beschäftigt und bin auch zu einem Ergebnis gekommen aber leider ist der Fehler immer noch vorhanden( sobald das Ergebnis von den letzten 4 Bytes in der Rechnung negativ werden soll)
Mein derzeitiger Code:
Code: Alles auswählen
unpacked_struct = struct.unpack_from("3i", data, 1)
print(unpacked_struct)
test = socket.ntohl(unpacked_struct[2])/1000
print(test)
Code: Alles auswählen
data = b'\xff\xff\xff\xe1\x80\xff\xf8*\x9e\xff\xff\x17b'
unpacked_struct = (-2132672513, -1641350913, 1645740031)
test = 4294907.746'
Es müsste aber test = -59,5 rauskommen.
Kann mir dabei vielleicht jemand helfen?
Re: Zweierkomplement
Verfasst: Donnerstag 6. April 2023, 09:15
von __deets__
Du gibst ja auch nicht an, big endian zu benutzen.
Code: Alles auswählen
>>> struct.unpack_from(">3i", data, 1)
(-7808, -513378, -59550)
Re: Zweierkomplement
Verfasst: Donnerstag 6. April 2023, 09:49
von KolbenKeule
Vielen, vielen Dank
Es funktioniert jetzt
Eine Suche findet sein Ende
Re: Zweierkomplement
Verfasst: Donnerstag 6. April 2023, 10:01
von KolbenKeule
Ich hatte gedacht das der Befehl "socket.ntohl" die Struktur mit Big Endian übernimmt?!
Re: Zweierkomplement
Verfasst: Donnerstag 6. April 2023, 10:05
von __deets__
Tut es auch, aber ignoriert dabei vorzeichen.
Code: Alles auswählen
>>> struct.unpack_from("3i", data, 1)
(-2132672513, -1641350913, 1645740031)
>>> socket.ntohl(1645740031)
4294907746
>>> struct.unpack("i", struct.pack("I", 4294907746))
(-59550,)
Das "funktioniert". Von hinten durch die Brust ins Auge.
Re: Zweierkomplement
Verfasst: Donnerstag 6. April 2023, 10:14
von KolbenKeule
Ach so, vielen Dank für die Erklärung.
Ich hoffe das es noch anderen hilft die auf der Suche sind
