Binärdatei in C-Quelltext umwandeln

Gast #1160734
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?
Gast #1160771
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...
Gast #1160784
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...
Gast #1160817
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...
#1160818
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.
Gast #1160849
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.
Gast #1160854
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 ;-)
#1160861
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
Persönliche Seite #1161313
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:
1
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:
1
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:
1
$ nm foo.o
2
000027c6 D _binary_foo_bin_end
3
000027c6 A _binary_foo_bin_size
4
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:
1
extern unsigned char _binary_foo_bin_start[];


Johann

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