Python: Seltsames Verhalten beim Schreiben von Binary

Gast #4677200
Hallo,
ich versuche gerade Binary-Daten in Python 2.7 zu schreiben. Dabei setze 
ich die Daten erst in einem String zusammen und wandel diese dann mit 
binascii um.
Das funktioniert auch fast immer. Aber nun bin ich ratlos.

Bei einer bestimmten String-Kombination wird 0x 0D eingefügt. Den Grund 
verstehe ich aber nicht.

Im Hex-Editor lese ich dann 7 Byte (bc 20 01 20 20 0d 0a) anstatt wie 
geplant 6 Byte. Wenn ich die Bin-Daten mit python auslese, sehe ich aber 
auch nichts von 0x 0D. Nur eben im Hex-Editor und damit vielleicht auch 
in einer anderen Software.

Was hat es damit auf sich?
1
# -*- coding: utf-8 -*-
2
import sys
3
import os.path
4
import binascii
5

6
   #h_block_sum = "012345" #working example
7
   h_test = "bc000100000abc000100000a"  # writes bc000100000d0abc000100000d0a in file ???
8
   #h_block_sum = "bc000100001abc000100000a" # writes bc000100000abc000100000d0a in file ???
9
   hb=binascii.a2b_hex(h_test)
10
   
11
   try:
12
      outputfile = open('test.txt', 'w')
13
      outputfile.write(hb)
14
   finally:
15
      outputfile.close()
16
      
17
   # test content in python
18
   inputfile = open('test.txt', 'r')
19
   block = inputfile.read(20)
20
   str1 = ""
21
   for ch in block:
22
      str1 += hex(ord(ch))+" "
23
   print("Reading Test-Data: "+str1)
24
   inputfile.close()
Gast #4677205
Dein 0x0a ist ein \n. Wenn ein Zeilenumbruch in eine Datei im Textmodus 
geöffnete Datei geschrieben wird, wird er (unter Windows) automatisch in 
\r\n (0x0d 0x0a) umgewandelt.
Gast #4677247
Wenn du eine Datei binär interpretiert möchtest, dann musst du diese 
auch binär öffnen.

Aus der Doku:

https://docs.python.org/2/library/functions.html#open
1
The default is to use text mode, which may convert '\n' characters to a
2
platform-specific representation on writing and back on reading. Thus, when
3
opening a binary file, you should append 'b' to the mode value to open the
4
file in binary mode, which will improve portability.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.