Python wandlung von Bit stream in int (array)

Gast #6971866
Lesenswert?

Hallo,

ich habe hier gerade eine kleine Aufgabe die ich zur Abwechslung mal mit 
Python umsetzen würde. Weil ich mich schon länger damit beschäftigen 
wollte und sich nun die Gelegenheit ergibt.

Ich habe bisher 0 Erfahrung damit, bisher hab ich viel in C gemacht, 
aber mit Scriptsprachen wenig Berührungspunkte.

Nun zu meinem Problem, ich habe ein großes Excel Dokument, in dem in 
einer Spalte immer ein Binärwert (0 oder 1) steht. Ich würde diese werte 
nun gerne möglichst platzsparend auf einen µC bringen. z.B. in Form 
eines uin16_t array[]. Zu diesem Zweck müsste ich nun die (variable) 
Anzahl der Daten in ein entsprechendes Format bringen.
Bsp. aus (eigentlich Untereinander)(00010001001000100011001101000100) 
soll dann so etwas wie
1
uint16_t array[]=
2
{ 0x2211, 0x4433, 
3
};

werden.


Mein Ansatz dazu wäre
1) Die Datei öffnen, ideal wäre direkt die excel datei
ich kann die aber auch vorher in ein anderes Format konvertieren, oder 
auch schon in excel diverse Anpassungen machen.

2) die eigentliche Wandlung
2.1) erst irgendwie in 16er Schritte zerlegen und jeweils in Value 
ablegen
2.2) den Wert Value mittels int('Value', 2) (?) in einen Integer wandeln
2.3) mittels ? in einen hex Wert wandeln
2.4) diesen Hexwert zu einem String hinzufügen

3) Ausgabe, entweder als txt oder in die Zwischenablage

Das beschriebene verfahren ist jedoch ziemlicher c style, jetzt wüste 
ich gerne wie das ganze vieleicht viel einfacher in Python realisiert 
werden kann.

Schon mal vielen Dank für eure Ideen und Denkanstöße
Gast #6972006
Lesenswert?

Mein Lösungsansatz 32 Bits zu einem String zusammen fassen und dann 
ungefähr so:
1
import struct
2

3
int32 = int("00010001001000100011001101000100", 2)
4
left, right = struct.unpack(">HH", int32.to_bytes(4, "big"))
5

6
print(hex(left), hex(right))
#6972178
Lesenswert?

Also das könntest du mit VBA auch gleich in Excel machen, dann hast du 
auch ne Scriptsprache gelernt. Oder ja nach Anzahl der Zeilen auch mit 
mehreren Formeln (wird aber sperrig).
Die Exceldatei mit Python direkt einlesen würde ich mir aber nicht antun 
wollen, zumal es da ja auch einigen Versionen an xl-Dateiformaten gibt. 
Es sein denn jemand hat dafür schon ein Modul entwickelt das man 
installieren könnte.

Sascha
Gast #6972236
Lesenswert?

VBA wäre sicher einfacher.
Für Python würde ich statt Excel ein (richtiges) csv einlesen und das 
ganze irgendwie in 5 Zeilen mit Numpy erledigen. Dann passt auch die 
Performance bei grossen Dateien.
Gast #6972268
Lesenswert?

nurmal so schrieb:
> Mein Ansatz dazu wäre
> 1) Die Datei öffnen, ideal wäre direkt die excel datei
> ich kann die aber auch vorher in ein anderes Format konvertieren, oder
> auch schon in excel diverse Anpassungen machen.
>
> 2) die eigentliche Wandlung
> 2.1) erst irgendwie in 16er Schritte zerlegen und jeweils in Value
> ablegen
> 2.2) den Wert Value mittels int('Value', 2) (?) in einen Integer wandeln
> 2.3) mittels ? in einen hex Wert wandeln
> 2.4) diesen Hexwert zu einem String hinzufügen
>
> 3) Ausgabe, entweder als txt oder in die Zwischenablage
1
import csv
2
out = ''
3
with open('Ecxel.txt') as csv_file:
4
    csv_reader = csv.reader(csv_file, delimiter=',')
5
    count = 0
6
    tmp = ''
7
    for row in csv_reader:
8
            count += 1
9
            tpm += row
10
            if count == 16:
11
                out += hex(int(tpm,2)
12
                tpm = ''
13
                count = 0
14
 # out speichern oder

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren