Hallo,
ich bekomme binary Data laenge 80 zugeschickt. Kann ich das in eine Datei schreiben?
word =""
i+=1
word = + i
Das waere ja fuer String. Wie mache ich es fuer binary data? Will es spaeter umwandeln, wenn ich es in einer Liste, String... habe
Danke,
Patrick
binary data
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ich verstehe deine Frage irgendwie nicht. Du bekommst Daten aus einem Socket. Binärdaten. Diese willst du in eine Datei speichern.
Kein Problem:
Wobei binary_data deine Daten sind.
Kein Problem:
Code: Alles auswählen
f = file('datei.bin', 'wb')
f.write(binary_data)
f.close()
Zuletzt geändert von Leonidas am Mittwoch 10. August 2005, 21:48, insgesamt 1-mal geändert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Danke,
habe es mittlerweile selbst rausbekommen. Hmm, habe es mit
pickle.dump(data,f) geloest. Deins sieht besser aus...
Patrick
habe es mittlerweile selbst rausbekommen. Hmm, habe es mit
pickle.dump(data,f) geloest. Deins sieht besser aus...
Patrick
Erstmal meine Hochachtung vor Leonidas hellseherischen Fähigkeiten! Ich habe Deine Frage so ganz und gar nicht verstanden.
Wie man das jetzt mit Binärdaten macht? Meine Güte es unzählige Möglichkeiten sinnlosen, ungültigen Code zu schreiben, der mit Binärdaten arbeitet.
Wobei Zeichenketten in Python im Grunde Byteketten sind, also Binärdaten.
Das nächste mal bitte etwas mehr Informationen in der Fragestellung, damit man nicht auf Glaskugeln angewiesen ist.
Als Mail? Klar kannst Du Mails in Dateien speichern. Woher soll man wissen *wie* Du die Daten geschickt bekommst!?patrickk hat geschrieben:Hallo,
ich bekomme binary Data laenge 80 zugeschickt. Kann ich das in eine Datei schreiben?
Das ist Unsinn. Erst bezeichnet `word` eine leere Zeichenkette, dann erhöhst Du `i` um eins, was nicht geht, weil `i` vorher mal einen Wert zugewiesen bekommen haben muss, damit "um 1 erhöhen" überhaupt Sinn macht. Mal davon abgesehen ersetzt Du in der letzten Zeile die Zeichenkette durch die Zahl `i` mit einem völlig sinnlosen unären ``+`` davor. Falls ``+=`` gemeint war, dann geht das im Regelfall auch nicht, weil man Zahlen nicht mit ``+`` an Zeichenketten anhängen kann.word =""
i+=1
word = + i
Das waere ja fuer String. Wie mache ich es fuer binary data? Will es spaeter umwandeln, wenn ich es in einer Liste, String... habe
Wie man das jetzt mit Binärdaten macht? Meine Güte es unzählige Möglichkeiten sinnlosen, ungültigen Code zu schreiben, der mit Binärdaten arbeitet.
Wobei Zeichenketten in Python im Grunde Byteketten sind, also Binärdaten.
Das nächste mal bitte etwas mehr Informationen in der Fragestellung, damit man nicht auf Glaskugeln angewiesen ist.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Vielen Dank, ehrt mich sehr das zu hören, jedoch habe ich nur geraten. Etwas anderes ist bei dieser geringen Menge an Informationen leider nicht möglich gewesen.BlackJack hat geschrieben:Erstmal meine Hochachtung vor Leonidas hellseherischen Fähigkeiten!
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Hallo,
das mit dem pickle.dump habe ich nur gemacht, weil ich anders nicht weiss wie ich die Daten speichern kann. Wenn mir da jmd einen Tipp geben koennte. Also:
data = pointer auf base64(data)
xml bekomme ich geschickt:
<base64>efeowefhioe==</base64>
data = oben...
wenn print (data), dann wird der code direkt mit base64 decodiert...
kann ich das irgendwie als string speichern?
patrick
das mit dem pickle.dump habe ich nur gemacht, weil ich anders nicht weiss wie ich die Daten speichern kann. Wenn mir da jmd einen Tipp geben koennte. Also:
data = pointer auf base64(data)
xml bekomme ich geschickt:
<base64>efeowefhioe==</base64>
data = oben...
wenn print (data), dann wird der code direkt mit base64 decodiert...
kann ich das irgendwie als string speichern?
patrick
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ich würde sagen, dass pickle bzw. YAML die optimalsten Lösungen sind, vor allem wenn es darum geht die Daten auch irgendwann wieder einzulesen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
So ganz klar ist mir Dein Problem immer noch nicht.patrickk hat geschrieben:data = pointer auf base64(data)
xml bekomme ich geschickt:
<base64>efeowefhioe==</base64>
data = oben...
wenn print (data), dann wird der code direkt mit base64 decodiert...
kann ich das irgendwie als string speichern?
Was genau hast Du? Eine Zeichenkette mit dem kompletten XML, oder nur die Base64 kodierten Daten, oder schon dekodiert, also Binärstring?
Dekodieren geht ganz einfach:
Code: Alles auswählen
In [8]: 'efeowefhioe=='.decode('base64')
Out[8]: 'y\xf7\xa8\xc1\xe7\xe1\x8a\x87'
Irgendwelche binären Daten in einer Zeichenkette in eine Datei speichern geht so:
Code: Alles auswählen
data = 'y\xf7\xa8\xc1\xe7\xe1\x8a\x87'
binfile = open('spam.dat', 'wb')
binfile.write(data)
binfile.close()
Vielen Dank!
Das hat mich weitergebracht.
Ich glaube ich habe bei base 64 decode etwas falsch gemacht. Jetzt sollte ich base 64 decoded stream haben.
Wie kann man ihn in hex umwandeln? oder was ist das was bei base 64 rauskommt? pickle.dump liefert direkt diesen stream (schon dekodiert...)
Das Problem, warum ich auf hex moechte ist, das ich eine liste von zeichen in binaerfrom bringe, damit ich dann mit einer Tabelle die Zeichen nach asci dekodiere. Leider ist das keine normale Tabelle, daher...
Patrick
Das hat mich weitergebracht.
Ich glaube ich habe bei base 64 decode etwas falsch gemacht. Jetzt sollte ich base 64 decoded stream haben.
Wie kann man ihn in hex umwandeln? oder was ist das was bei base 64 rauskommt? pickle.dump liefert direkt diesen stream (schon dekodiert...)
Das Problem, warum ich auf hex moechte ist, das ich eine liste von zeichen in binaerfrom bringe, damit ich dann mit einer Tabelle die Zeichen nach asci dekodiere. Leider ist das keine normale Tabelle, daher...
Patrick
Wenn man Base64 dekodiert, dann bekommt man das heraus was vorher kodiert wurde. Kodieren kann man alles, d.h. eine beliebige Folge von Bytes.patrickk hat geschrieben:Ich glaube ich habe bei base 64 decode etwas falsch gemacht. Jetzt sollte ich base 64 decoded stream haben.
Wie kann man ihn in hex umwandeln? oder was ist das was bei base 64 rauskommt?
Das klingt wieder ziemlich wirr. Was verstehst Du unter "hex"? Willst Du am Ende einfach nur eine Ersetzungstabelle auf Bytes anwenden? Dann schau Dir mal die `translate()`-Methode von Zeichenketten an.Das Problem, warum ich auf hex moechte ist, das ich eine liste von zeichen in binaerfrom bringe, damit ich dann mit einer Tabelle die Zeichen nach asci dekodiere.
Hallo,
leider ist es eine andere Tabelle, als die normale. Desshalb will ich auf bit, aber das klappt. Es sind naemlich 7 bit/ Symbol...
Wie erstellt man am besten selbst eine Tabelle?
ich habe momentan "0001011":"i" (bsp. wert ist bestimmt falsch)
Die Sondezeichen machen so Probleme wie: " oder '
ich koennte aber vielleicht fuer diese zeichen die hex werte nehmen (fuer ascii). acht das sinn? Wenn ich mit str() ausgebe sollte dann ja der ascii wert ausgegeben werden...
leider ist es eine andere Tabelle, als die normale. Desshalb will ich auf bit, aber das klappt. Es sind naemlich 7 bit/ Symbol...
Wie erstellt man am besten selbst eine Tabelle?
ich habe momentan "0001011":"i" (bsp. wert ist bestimmt falsch)
Die Sondezeichen machen so Probleme wie: " oder '
ich koennte aber vielleicht fuer diese zeichen die hex werte nehmen (fuer ascii). acht das sinn? Wenn ich mit str() ausgebe sollte dann ja der ascii wert ausgegeben werden...
Du hast also das Byte als Binärzahldarstellung, z.B. "101010", und willst jetzt das entsprechende Zeichen in der ASCII-Tabelle, in diesem Falle also das mit der Nummer 42, den "*" haben? Das geht einfach:
Du kannst int die ZahlBasis übergeben, in die der String ist.
Code: Alles auswählen
chr(int("101010",2))
Was ist denn die "normale" Tabelle?patrickk hat geschrieben:leider ist es eine andere Tabelle, als die normale.
Sind die trotzdem immer in einem Byte gespeichert, d.h. ist das oberste Bit immer 0 oder sind die Werte über Bytegrenzen verteilt?Desshalb will ich auf bit, aber das klappt. Es sind naemlich 7 bit/ Symbol...
Das kommt ganz darauf an, wie die Daten vorliegen. Was Du immer noch nicht wirklich verraten hast. Wenn es eine Zeichenkette mit 7 Bit pro Byte und einem unbenutztem Bit ist, dann ist die `translate()` Methode von Zeichenketten die effektivste Lösung.Wie erstellt man am besten selbst eine Tabelle?