www.mikrocontroller.net

Forum: Compiler & IDEs Binärdatei in C-Quelltext umwandeln


Autor: Cfr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kennt jemand ein Tool, welches eine Binärdatei in C-Quelltext umwandelt,
z.B. in:

char bin_datei[] = { // Binärdatei-Inhalt
  0x69,0x00,0x00,0x1F,0xEF,0x15,0x3F,0xC90,
  0x0F,0x63,0x36,0x99,0x1A,0xAF,0xEB,0x55,
  u.s.w.
};

Konnte nur ein BINTOC finden, weiß aber nicht wie das funktionieren 
soll, ist keine .exe dabei?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1. Also estmal ist jede Datei eine Binärdatei, sie besteht immer aus 
bytes mit bits.

2. Es ist nicht möglich aus einem compilat zum Quelltext 
zurückzuwandeln.

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter wrote:
> 1. Also estmal ist jede Datei eine Binärdatei, sie besteht immer aus
> bytes mit bits.

Erst Klugscheissern...

> 2. Es ist nicht möglich aus einem compilat zum Quelltext
> zurückzuwandeln.

...und dann solchen Stuss verzapfen.

Lesen, denken, posten. Und zwar den ganzen Post, nicht nur den Titel.

P.S: Das ist eigentlich schneller selbst geschrieben, als gefragt...

Autor: Cfr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>1. Also estmal ist jede Datei eine Binärdatei, sie besteht immer aus
>bytes mit bits.
>
>2. Es ist nicht möglich aus einem compilat zum Quelltext
>zurückzuwandeln.

völlig klar, Du hast die Frage wahrscheinlich nicht verstanden:

Ich will nur den Inhalt (Bytes 1:1) in meinen C-Quelltext einbinden, so 
wie im BSP. angegeben als Deklaration, zur Weiterverarbeitung. Damit 
will ich mir nur viel Fleißarbeit ersparen.

Zur Not muß ich es selber schreiben, aber sowas gibts bestimmt schon...

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry aber der Titel hat mich so durcheinander gebracht. Nach dem 
dritten lesen habe ich jetzt auch verstanden was gemeint war.

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#include <stdio.h>

int main( void)
{
  int Byte;

  while(( Byte = getchar()) != EOF)
  {
    printf( "0x%02x, ", ( char) Byte);
  }

  return( 0);
}

Autor: Stefan Salewski (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Sorry aber der Titel hat mich so durcheinander gebracht.

Ich dachte auch sofort an Hackfleisch -> Kuh.

Wer ein Unix-artiges Betriebssystem zur Verfügung hat würde wohl einfach 
die Ausgabe vom Programm Hexdump in eine Datei umleiten...

Autor: Mr. Unwichtig (nomis3000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schreibs dir selbst. Bis zur ersten brauchbaren Antwort hat es 19minuten 
gebraucht. Bis dorthin hättest du es schon längst selbst schreiben 
können.

Such dir nen C/C++ Compiler für den PC. Danach liest du dich einfach in 
die Funktionen für das Öffnen, Schreiben und Lesen von Dateien ein. Der 
Rest sollte kein Problem Sein.

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter,

würd' ich mir nix draus machen, ich hab's genauso verstanden, der OP hat 
die Überschrift missverständlich geschrieben, das ist kein Quelltext, 
das sind einfach Hex-Werte.

Bei mir ging's in 20 Sekunden, länger als ich hier schreibe:

XVI32 Hexeditor ---> Block markieren ---> File, Clipboard, Copy as Hex 
String ---> Copy und Paste in Wordpad ---> Suchen/Ersetzen alle 
Leerzeichen durch ",0x" ersetzen. Dann liegts passend vor und kann 
eingefügt werden.

Autor: Cfr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Schreibs dir selbst. Bis zur ersten brauchbaren Antwort hat es 19minuten
>gebraucht. Bis dorthin hättest du es schon längst selbst schreiben
>können.
>
>Such dir nen C/C++ Compiler für den PC. Danach liest du dich einfach in
>die Funktionen für das Öffnen, Schreiben und Lesen von Dateien ein. Der
>Rest sollte kein Problem Sein.

Sicher, aber ich dachte sowas wird hier öfters mal gebraucht und wäre 
schnell Nachnutzbar. Ich müsste mich in der Tat erst mal mit 
Dateifunktionen beschäftigen, kommt bei µC-Programmierung in C nicht so 
oft vor ;-)

Autor: Sebastian B. (mircobolle)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
:-)

Ja, der Titel ist nicht so glücklich gewählt:
"Binärdatei in C-Quelltext umwandeln"

sowas wär wahrscheinlich verständlicher:
"Binärdatei in C-Quelltext als Byte Array einbinden"


So ein Tool wäre ab und zu wirklich sehr hilfreich.

Ansonsten wie schon geschrieben selber eine kleine Konsolenanwendung 
schreiben...

Parameter: Binär-File [Eingabedatei] C_Struct_Datei[Ausgabedatei]

dann jedes byte bis EOF einlesen und 0x vorne dranhängen, schön in einem 
byte struct formatieren, am ende alle bytes aufzählen und ein define für 
Array_Max einfügen...

ah, und nicht zu vergessen das Tool bitte hier posten ;-)

MFG

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie gesagt, im Nu erledigt mit dem Hexeditor hier, ist Freeware:

http://www.handshake.de/user/chmaas/delphi/downloa...

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

suche mal in der Codesammlung nach "Bin2Hex"

MfG

Autor: Cfr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@MWS
>Wie gesagt, im Nu erledigt mit dem Hexeditor hier, ist Freeware:

ja, so gehts schon recht gut, noch paar Umbrüche rein und fertig,
danke für den Tipp.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> suche mal in der Codesammlung nach "Bin2Hex"
Findest du den Beitrag "Bin2Hex für MP3,GIF usw."

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eigentlich muss man das doch nicht als C-Array austexten.

Die hex-Datei foo.hex könnte man umwandeln in ein reines Binärfile:
objcopy -I ihex foo.hex -O binary foo.bin

Das foo.bin ist dann eine nackte Binärdatei, ohne Prüfsumme etc.

Dieses Binärfile wandelt man dann in ein Object-File. Da man das 
BFD-Target wissen muss, hier mal explizit für eine AVR-Toolchain 
(Object-Formal ist elf32-avr) und Architektur avr4 (zB ATmega8). Für 
einen ARM oder was auch immer muss man dann die Tools (xxx-objcopy, 
xxx-nm, ...) und Angaben anpassen:
avr-objcopy -I binary foo.bin --binary-architecture avr4 -O elf32-avr foo.o

Das foo.o kann man direkt ins Projekt dazulinken, es hat das gleiche 
Format wie im Compilier-Vorgang erstllte o-Files (elf32-avr). Die Option 
--binary-architekture bewirkt u.a., daß ein paar Symbole definiert 
werden, die Auskunft über das Objekt geben, und über die es vom C aus 
angesprochen werden kann:
$ nm foo.o
000027c6 D _binary_foo_bin_end
000027c6 A _binary_foo_bin_size
00000000 D _binary_foo_bin_start

Was nun noch fehlt, sind die Deklarationen in der C-Quelle. Wenn das 
Zeug als unsigned char angesprochen werden soll:
extern unsigned char _binary_foo_bin_start[];


Johann

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.