<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Binärdatei einlesen und einen Teil davon als Hex-Zahlen in eine andere Datei schreiben]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe hier eine Binärdatei vorliegen, von der ich einen Teil einlese. D.h. ich habe eine Position in der Binärdatei an der ich meinen Lesezeiger positioniere, dann lese ich z.B. 4 Bytes ein, und diese möchte ich in eine andere Datei speichern. Wenn z.B. die 4 interessierenden Bytes 00 01 FF AA lauten, dann möchte ich in der neuen Datei so etwas wie &quot;0x0001FFAA&quot; stehen haben.</p>
<pre><code>ifstream my_file (strSourceFilePath, ios::binary); 
my_file .seekg(32L);  //ab Offset 32 beginnt der interessierende Teil
char my_buffer[4];  //ich bin an 4 Bytes interessiert
my_file.read(my_buffer, 4); //4 Bytes aus der Datei in my_buffer einlesen
</code></pre>
<p>Aber irgendwie funktioniert das ganz und gar nicht so, wie ich mir das vorstelle. Gibt es irgend eine Möglichkeit, eine Datei so einzulesen, dass quasi die Hex-Werte als ASCII gespeichert werden? Also z.B. wenn ich FF einlese, dass das dann auch als FF (ASCII) gespeichert wird damit ich es direkt in eine andere Datei schreiben kann?!</p>
<p>Bin für Hilfe dankbar!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/210201/binärdatei-einlesen-und-einen-teil-davon-als-hex-zahlen-in-eine-andere-datei-schreiben</link><generator>RSS for Node</generator><lastBuildDate>Tue, 13 Oct 2026 10:36:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/210201.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 08 Apr 2008 13:11:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Binärdatei einlesen und einen Teil davon als Hex-Zahlen in eine andere Datei schreiben on Tue, 08 Apr 2008 13:11:04 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe hier eine Binärdatei vorliegen, von der ich einen Teil einlese. D.h. ich habe eine Position in der Binärdatei an der ich meinen Lesezeiger positioniere, dann lese ich z.B. 4 Bytes ein, und diese möchte ich in eine andere Datei speichern. Wenn z.B. die 4 interessierenden Bytes 00 01 FF AA lauten, dann möchte ich in der neuen Datei so etwas wie &quot;0x0001FFAA&quot; stehen haben.</p>
<pre><code>ifstream my_file (strSourceFilePath, ios::binary); 
my_file .seekg(32L);  //ab Offset 32 beginnt der interessierende Teil
char my_buffer[4];  //ich bin an 4 Bytes interessiert
my_file.read(my_buffer, 4); //4 Bytes aus der Datei in my_buffer einlesen
</code></pre>
<p>Aber irgendwie funktioniert das ganz und gar nicht so, wie ich mir das vorstelle. Gibt es irgend eine Möglichkeit, eine Datei so einzulesen, dass quasi die Hex-Werte als ASCII gespeichert werden? Also z.B. wenn ich FF einlese, dass das dann auch als FF (ASCII) gespeichert wird damit ich es direkt in eine andere Datei schreiben kann?!</p>
<p>Bin für Hilfe dankbar!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1488502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1488502</guid><dc:creator><![CDATA[Gast56814]]></dc:creator><pubDate>Tue, 08 Apr 2008 13:11:04 GMT</pubDate></item><item><title><![CDATA[Reply to Binärdatei einlesen und einen Teil davon als Hex-Zahlen in eine andere Datei schreiben on Tue, 08 Apr 2008 13:23:51 GMT]]></title><description><![CDATA[<p>Du brauchst doch nur dein char-Array entsprechend rauszuschreiben. Wenn du die Hex-Zahlen dort drin haben willst, kannst du das doch mit Modifizierer hex machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1488511</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1488511</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 08 Apr 2008 13:23:51 GMT</pubDate></item><item><title><![CDATA[Reply to Binärdatei einlesen und einen Teil davon als Hex-Zahlen in eine andere Datei schreiben on Tue, 08 Apr 2008 13:38:05 GMT]]></title><description><![CDATA[<p>Einlese und dann als Hex ausgeben.</p>
<p><a href="http://www.cppreference.com/io_flags.html#format_flags" rel="nofollow">http://www.cppreference.com/io_flags.html#format_flags</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1488524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1488524</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 08 Apr 2008 13:38:05 GMT</pubDate></item><item><title><![CDATA[Reply to Binärdatei einlesen und einen Teil davon als Hex-Zahlen in eine andere Datei schreiben on Wed, 09 Apr 2008 10:11:13 GMT]]></title><description><![CDATA[<p>Hallo nochmal,</p>
<p>okay vielen Dank mal soweit. Ich habe jetzt in etwa so etwas:</p>
<pre><code>char my_buffer[4] = {0}; 
ifstream dateilesen(...);
dateilesen.get(my_buffer[0]); 
dateilesen.get(my_buffer[1]); 
dateilesen.get(my_buffer[2]); 
dateilesen.get(my_buffer[3]); 
								printf(&quot;buffer3: %x buffer2: %x buffer1: %x buffer0: %x&quot;, my_buffer[3], my_buffer[2], my_buffer[1], my_buffer[0]);
</code></pre>
<p>Nur erhalte ich manchmal eine Ausgabe, die ich absolut nicht nachvollziehen kann. Und zwar kriege ich, wenn in der Datei z.B. &quot;14 23 FF 54&quot; steht, als Ausgabe &quot;buffer3: 54 buffer2: ffffffff buffer1: 23 buffer0: 14&quot;</p>
<p>Das heißt er hat das zweite Element von my_buffer nicht mit &quot;FF&quot;, sondern mit &quot;ffffffff&quot; gefüllt. Kann mir jemand sagen, woran das liegt?</p>
<p>Danke für Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1488954</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1488954</guid><dc:creator><![CDATA[Gast56814]]></dc:creator><pubDate>Wed, 09 Apr 2008 10:11:13 GMT</pubDate></item><item><title><![CDATA[Reply to Binärdatei einlesen und einen Teil davon als Hex-Zahlen in eine andere Datei schreiben on Wed, 09 Apr 2008 11:01:55 GMT]]></title><description><![CDATA[<p>Der Parameter wird beim Format %x als unsigned int interpretiert. Das könnte Probleme machen...?<br />
Da du C++ verwendest nimm besser cout &lt;&lt; hex &lt;&lt; buffer[0];</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1488982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1488982</guid><dc:creator><![CDATA[ihoernchen]]></dc:creator><pubDate>Wed, 09 Apr 2008 11:01:55 GMT</pubDate></item><item><title><![CDATA[Reply to Binärdatei einlesen und einen Teil davon als Hex-Zahlen in eine andere Datei schreiben on Wed, 09 Apr 2008 11:31:26 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>danke für die Antwort. Tatsächlich scheint es etwas mit dem Vorzeichen zu tun zu haben. Wenn ich in der printf-Ausgabe den Inhalt des Arrays bei der Ausgabe jeweils mit static_cast in ein unsigned char umwandle funktioniert die Ausgabe. Aber wenn ich es mit dem &lt;&lt; Operator in meine Datei schreiben will, bringt der Cast leider nichts. Unten stehend nochmal ein Teil meines Codes, die if-Abfrage soll dafür da sein dass ich jeweils eine führende kriege falls es sich um eine einstellige Hex-Zahl handeln sollte.</p>
<p>Hat vielleicht noch jemand nen Tip?</p>
<pre><code>if(my_buffer[3] &lt; 16)
    version_file &lt;&lt; &quot;0&quot;; 
    dateilesen &lt;&lt; uppercase &lt;&lt; hex &lt;&lt; static_cast&lt;unsigned int&gt;(my_buffer[3]);
if(my_buffer[2] &lt; 16)
    version_file &lt;&lt; &quot;0&quot;; 
    dateilesen &lt;&lt; uppercase &lt;&lt; hex &lt;&lt; static_cast&lt;unsigned int&gt;(my_buffer[2]);
if(my_buffer[1] &lt; 16)
    version_file &lt;&lt; &quot;0&quot;; 
    dateilesen &lt;&lt; uppercase &lt;&lt; hex &lt;&lt; static_cast&lt;unsigned int&gt;(my_buffer[1]);
if(my_buffer[0] &lt; 16)
    version_file &lt;&lt; &quot;0&quot;; 
    dateilesen &lt;&lt; uppercase &lt;&lt; hex &lt;&lt; static_cast&lt;unsigned int&gt;(my_buffer[0]);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1488996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1488996</guid><dc:creator><![CDATA[Gast56814]]></dc:creator><pubDate>Wed, 09 Apr 2008 11:31:26 GMT</pubDate></item><item><title><![CDATA[Reply to Binärdatei einlesen und einen Teil davon als Hex-Zahlen in eine andere Datei schreiben on Wed, 09 Apr 2008 12:36:34 GMT]]></title><description><![CDATA[<p>caste besser nach unsigned char.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1489046</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1489046</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 09 Apr 2008 12:36:34 GMT</pubDate></item><item><title><![CDATA[Reply to Binärdatei einlesen und einen Teil davon als Hex-Zahlen in eine andere Datei schreiben on Wed, 09 Apr 2008 12:41:12 GMT]]></title><description><![CDATA[<p>Wenn ich nach unsigned char caste, dann erhalte ich nicht lesbare Zeichen (z.B. 0x0000), da der modifizierer hex eine Zahl (z.B. int) erwartet.</p>
<p>Also langsam dreh ich durch. Das kann doch nicht so schwer sein, eine Datei einzulesen, und dann in eine andere Datei das reinzuschreiben was ich eigentlich in einem Hexeditor sehen kann.</p>
<p>Oder stehe ich einfach nur tierisch auf dem Schlauch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1489050</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1489050</guid><dc:creator><![CDATA[Gast56814]]></dc:creator><pubDate>Wed, 09 Apr 2008 12:41:12 GMT</pubDate></item><item><title><![CDATA[Reply to Binärdatei einlesen und einen Teil davon als Hex-Zahlen in eine andere Datei schreiben on Wed, 09 Apr 2008 12:47:44 GMT]]></title><description><![CDATA[<p>Nene. unsigned int ist schon ok.<br />
Zeig mal das komplette (compilierbare) Programm.</p>
<p>Du kannst auch:</p>
<pre><code>...
#include &lt;iomanip&gt;
...
cout &lt;&lt; hex &lt;&lt; setfill('0') &lt;&lt; setw(2) &lt;&lt; static_cast&lt;unsigned int&gt;(buffer[i]);
</code></pre>
<p>machen. Bedeutet: mindestens 2 Zeichen ausgeben und gegebenenfalls mit '0' auffüllen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1489056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1489056</guid><dc:creator><![CDATA[ihoernchen]]></dc:creator><pubDate>Wed, 09 Apr 2008 12:47:44 GMT</pubDate></item><item><title><![CDATA[Reply to Binärdatei einlesen und einen Teil davon als Hex-Zahlen in eine andere Datei schreiben on Wed, 09 Apr 2008 13:03:29 GMT]]></title><description><![CDATA[<p>Also das mit dem setfill ist auf jeden Fall schon mal eine super Idee. Das werde ich dann noch einbauen. Der komplette Quellcode ist zu lang, deshalb mal hier ein kompilierbarer Ausschnitt.</p>
<p>Wenn nun in der Datei &quot;test.txt&quot; ab Leseposition 16 so etwas wie &quot;09 63 FF 01&quot; steht, wird in &quot;write_file&quot; fälschlicherweise &quot;ID: 0x010FFFFFFFF6309&quot; geschrieben. Dass die Reihenfolge umgedreht ist, ist gewollt. Aber anstatt FF an zweiter Stelle schreibt er eben 0FFFFFFFF. Wobei die 0 bestimmt von meiner if-Schweinerei kommt. Also das eigentiche Problem sind die vielen F's <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
<pre><code>#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;

using namespace std; 

int main(void)
{
	ifstream read_file(&quot;test.txt&quot;); 
	ofstream write_file (&quot;write_file.txt&quot;);
	char my_buffer[4] = {0}; 

	read_file.seekg(0L);
	read_file.seekg(16L);
	read_file.read(my_buffer, 4); 

	write_file &lt;&lt; &quot;ID: 0x&quot;;
	if(my_buffer[3] &lt; 16)
		write_file &lt;&lt; &quot;0&quot;; 
	write_file &lt;&lt; uppercase &lt;&lt; hex &lt;&lt; static_cast&lt;unsigned int&gt;(my_buffer[3]);

	if(my_buffer[2] &lt; 16)
		write_file &lt;&lt; &quot;0&quot;; 
	write_file &lt;&lt; uppercase &lt;&lt; hex &lt;&lt; static_cast&lt;unsigned int&gt;(my_buffer[2]);

	if(my_buffer[1] &lt; 16)
		write_file &lt;&lt; &quot;0&quot;; 
	write_file &lt;&lt; uppercase &lt;&lt; hex &lt;&lt; static_cast&lt;unsigned int&gt;(my_buffer[1]);

	if(my_buffer[0] &lt; 16)
		write_file &lt;&lt; &quot;0&quot;; 
	write_file &lt;&lt; uppercase &lt;&lt; hex &lt;&lt; static_cast&lt;unsigned int&gt;(my_buffer[0]);

	write_file.close();
	read_file.close();

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1489075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1489075</guid><dc:creator><![CDATA[Gast56814]]></dc:creator><pubDate>Wed, 09 Apr 2008 13:03:29 GMT</pubDate></item><item><title><![CDATA[Reply to Binärdatei einlesen und einen Teil davon als Hex-Zahlen in eine andere Datei schreiben on Wed, 09 Apr 2008 13:17:55 GMT]]></title><description><![CDATA[<p>Ok. Liegt am Datentyp. 0xFF passt zwar in den char rein. Erzeugt aber unerwünschte Ergebnisse.</p>
<p>char 0xFF = -1<br />
wird zu<br />
unsigned int (unsigned int -1 = 0xFFFFFFFF)</p>
<p>Also vorher auf unsigned char casten und es passt ;-).</p>
<p>Mal ohne das drumherum:</p>
<pre><code>// mmh sieht komisch aus
cout &lt;&lt; static_cast&lt;unsigned int&gt;(static_cast&lt;unsigned char&gt;(buffer[i]));
</code></pre>
<p>Einfacher ist es, wenn du gleich mit unsigned char buffer arbeitest.<br />
Evtl. musst du den dann beim .read casten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1489098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1489098</guid><dc:creator><![CDATA[ihoernchen]]></dc:creator><pubDate>Wed, 09 Apr 2008 13:17:55 GMT</pubDate></item><item><title><![CDATA[Reply to Binärdatei einlesen und einen Teil davon als Hex-Zahlen in eine andere Datei schreiben on Wed, 09 Apr 2008 13:33:54 GMT]]></title><description><![CDATA[<p>Wow ist ja der Wahnsinn, es geht!! Unglaublich wie viel Zeit man manchmal mit solchen Kleinigkeiten verbringt.</p>
<p>Von vornherein mit unsigned char arbeiten geht leider nicht. Aus irgend einem Grund kann der Compiler bei .read nicht casten so wie ich es will. Oder aber ich hab nen Schreibfehler drin <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Auf jeden Fall vielen Dank für die Hilfe.</p>
<p>Nun noch eine andere Frage: Ich lese immer wieder, dass es von schlechtem Stil zeugt, wenn man so viel in der Gegend rumcastet. Aber eine andere Idee hätte ich jetzt nicht gehabt für das was ich machen will.</p>
<p>Oder gibt es einen vollkommen anderen Weg (mit C oder C++)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1489114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1489114</guid><dc:creator><![CDATA[Gast56814]]></dc:creator><pubDate>Wed, 09 Apr 2008 13:33:54 GMT</pubDate></item><item><title><![CDATA[Reply to Binärdatei einlesen und einen Teil davon als Hex-Zahlen in eine andere Datei schreiben on Wed, 09 Apr 2008 14:28:54 GMT]]></title><description><![CDATA[<p>naja, du könntest ja mal so versuchen:</p>
<pre><code class="language-cpp">std::fstream stream(&quot;filename.bin&quot;, std::ios::in|std::ios::binary);
unsigned char bytes[4];
stream.read(reinterpret_cast&lt;char *&gt;( bytes ), 4 );
</code></pre>
<p>Das sollte eigentlich funktionieren afaik</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1489168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1489168</guid><dc:creator><![CDATA[Vorden]]></dc:creator><pubDate>Wed, 09 Apr 2008 14:28:54 GMT</pubDate></item><item><title><![CDATA[Reply to Binärdatei einlesen und einen Teil davon als Hex-Zahlen in eine andere Datei schreiben on Wed, 09 Apr 2008 14:48:12 GMT]]></title><description><![CDATA[<p>Gast56814 schrieb:</p>
<blockquote>
<p>Oder gibt es einen vollkommen anderen Weg (mit C oder C++)?</p>
</blockquote>
<p>Hi Bruder !<br />
Check this out:</p>
<pre><code class="language-cpp">unsigned char c = 255;
printf(&quot;%X&quot;, c );
</code></pre>
<p>Analog dazu, um in eine Datei zu schreiben:</p>
<pre><code class="language-cpp">fprintf( fp, &quot;%X&quot;, c );
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1489180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1489180</guid><dc:creator><![CDATA[Big Brother]]></dc:creator><pubDate>Wed, 09 Apr 2008 14:48:12 GMT</pubDate></item></channel></rss>