<?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äre chars werden nicht mithilfe von atof in floats konvertiert]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgendes Problem. Das Programm GNURadio gibt mir eine binäre Datei mit seinen Samples aus. Ich möchte diese in C++ als ein Array mit floats speichern.</p>
<p>Derzeit sieht mein Code so aus:</p>
<pre><code>void read_file (const char* verzeichnis){
	    std::ifstream file;

	    file.open(verzeichnis, std::ios::binary| std::ios::in); // &lt;== Filename eintragen

	    if(!(file.is_open())){
	    	std::cout &lt;&lt; &quot;Data\t&quot; &lt;&lt; verzeichnis &lt;&lt; &quot;\tis not open!!&quot; &lt;&lt; std::endl;
	        return;
	    };

	    file.seekg (0, std::ios::end);
	    int length = file.tellg();
	    int complex_length = length/4;
	    file.seekg (0, std::ios::beg);

	    char * buffer= new char[length];
	    file.read(buffer,length);

	    int u = 0;

	    	    for(int h = 0; h &lt;  complex_length; h++){
	    	    	char pbuffer[4] = {buffer[u], buffer[u+1],buffer[u+2],buffer[u+3]};

//	    	    	std::cout &lt;&lt; &quot;atof(pbuffer):\t&quot; &lt;&lt; pbuffer &lt;&lt; std::endl;
	    	    	_values.push_back(atof(pbuffer));
	    	    	u = u+4;
	    	    }

delete[] buffer;
return;
}
</code></pre>
<p>eingebunden sind folgende Libaries:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;cstdio&gt;
#include &lt;cstdlib&gt;
#include &lt;iomanip&gt;
#include &lt;vector&gt;
#include &lt;cmath&gt;
#include &lt;string&gt;
</code></pre>
<p><em>_values</em> ist ein <em>std::vector&lt;float&gt;</em> und gehört der Klasse.</p>
<p>Ich benutze Eclipse Version: 3.7.2 unter Linux 3.5.0-28-generic und x86_64.</p>
<p>Wenn ich probeweise das zum cout debuggen ausführe:</p>
<pre><code>for(int z = 0; z &lt; 1e5; z++)
	    	    	std::cout &lt;&lt; &quot;buffer:\t&quot; &lt;&lt; buffer[z] &lt;&lt; std::endl;
</code></pre>
<p>,bekomme ich Werte bzw. chars ausgegeben. Also die Datei wird wahrscheinlich ordnungsgemäß eingelesen. Ich würde gerne memcpy() <a href="http://www.cplusplus.com/reference/cstring/memcpy/" rel="nofollow">http://www.cplusplus.com/reference/cstring/memcpy/</a> benutzen. Allerdings habe ich dabei ein Problem mit dem kompilieren, welches ich nicht lösen kann, obwohl ich schon bei Google gesucht habe <a href="http://stackoverflow.com/questions/7966976/eclipse-indigo-cdt-function-could-not-be-resolved" rel="nofollow">http://stackoverflow.com/questions/7966976/eclipse-indigo-cdt-function-could-not-be-resolved</a>. Die Funktion <em>memcpy</em> ist bei mir angeblich in keinem Gültigkeitsbereich definiert.</p>
<p><strong>Kennt einer eine Alternative zum Einlesen von binären Dateien, die dann zu floats zu konvertieren sind? Kann einer diese hier posten?</strong></p>
<p>Ich bin mit meinem Latein am Ende.</p>
<p>mfg</p>
<p>Thomas</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/316544/binäre-chars-werden-nicht-mithilfe-von-atof-in-floats-konvertiert</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Jul 2026 21:52:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/316544.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 07 May 2013 17:34:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Binäre chars werden nicht mithilfe von atof in floats konvertiert on Tue, 07 May 2013 17:34:49 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgendes Problem. Das Programm GNURadio gibt mir eine binäre Datei mit seinen Samples aus. Ich möchte diese in C++ als ein Array mit floats speichern.</p>
<p>Derzeit sieht mein Code so aus:</p>
<pre><code>void read_file (const char* verzeichnis){
	    std::ifstream file;

	    file.open(verzeichnis, std::ios::binary| std::ios::in); // &lt;== Filename eintragen

	    if(!(file.is_open())){
	    	std::cout &lt;&lt; &quot;Data\t&quot; &lt;&lt; verzeichnis &lt;&lt; &quot;\tis not open!!&quot; &lt;&lt; std::endl;
	        return;
	    };

	    file.seekg (0, std::ios::end);
	    int length = file.tellg();
	    int complex_length = length/4;
	    file.seekg (0, std::ios::beg);

	    char * buffer= new char[length];
	    file.read(buffer,length);

	    int u = 0;

	    	    for(int h = 0; h &lt;  complex_length; h++){
	    	    	char pbuffer[4] = {buffer[u], buffer[u+1],buffer[u+2],buffer[u+3]};

//	    	    	std::cout &lt;&lt; &quot;atof(pbuffer):\t&quot; &lt;&lt; pbuffer &lt;&lt; std::endl;
	    	    	_values.push_back(atof(pbuffer));
	    	    	u = u+4;
	    	    }

delete[] buffer;
return;
}
</code></pre>
<p>eingebunden sind folgende Libaries:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;cstdio&gt;
#include &lt;cstdlib&gt;
#include &lt;iomanip&gt;
#include &lt;vector&gt;
#include &lt;cmath&gt;
#include &lt;string&gt;
</code></pre>
<p><em>_values</em> ist ein <em>std::vector&lt;float&gt;</em> und gehört der Klasse.</p>
<p>Ich benutze Eclipse Version: 3.7.2 unter Linux 3.5.0-28-generic und x86_64.</p>
<p>Wenn ich probeweise das zum cout debuggen ausführe:</p>
<pre><code>for(int z = 0; z &lt; 1e5; z++)
	    	    	std::cout &lt;&lt; &quot;buffer:\t&quot; &lt;&lt; buffer[z] &lt;&lt; std::endl;
</code></pre>
<p>,bekomme ich Werte bzw. chars ausgegeben. Also die Datei wird wahrscheinlich ordnungsgemäß eingelesen. Ich würde gerne memcpy() <a href="http://www.cplusplus.com/reference/cstring/memcpy/" rel="nofollow">http://www.cplusplus.com/reference/cstring/memcpy/</a> benutzen. Allerdings habe ich dabei ein Problem mit dem kompilieren, welches ich nicht lösen kann, obwohl ich schon bei Google gesucht habe <a href="http://stackoverflow.com/questions/7966976/eclipse-indigo-cdt-function-could-not-be-resolved" rel="nofollow">http://stackoverflow.com/questions/7966976/eclipse-indigo-cdt-function-could-not-be-resolved</a>. Die Funktion <em>memcpy</em> ist bei mir angeblich in keinem Gültigkeitsbereich definiert.</p>
<p><strong>Kennt einer eine Alternative zum Einlesen von binären Dateien, die dann zu floats zu konvertieren sind? Kann einer diese hier posten?</strong></p>
<p>Ich bin mit meinem Latein am Ende.</p>
<p>mfg</p>
<p>Thomas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2321775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2321775</guid><dc:creator><![CDATA[Thomas_C11]]></dc:creator><pubDate>Tue, 07 May 2013 17:34:49 GMT</pubDate></item><item><title><![CDATA[Reply to Binäre chars werden nicht mithilfe von atof in floats konvertiert on Tue, 07 May 2013 18:12:56 GMT]]></title><description><![CDATA[<p>Wie werden die Samples denn in der Datei gespeichert?</p>
<p>Du versuchst 4 Byte Blöcke in einen ständig neu erstellten Array zu packen, gibst diesen dann als nicht terminierenden String aus, womit du atof fütterst. Klingt schon falsch, nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2321784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2321784</guid><dc:creator><![CDATA[Youka]]></dc:creator><pubDate>Tue, 07 May 2013 18:12:56 GMT</pubDate></item><item><title><![CDATA[Reply to Binäre chars werden nicht mithilfe von atof in floats konvertiert on Tue, 07 May 2013 18:14:44 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>binäre Datei (bzw. Daten) und atof (Ascii to float) paßt aber nicht zusammen!<br />
Lese es gleich als float-Werte ein:</p>
<pre><code>// diese beiden Zeilen sind dann überflüssig
// char * buffer= new char[length];
// file.read(buffer,length);

for(int h = 0; h &lt; complex_length; h++)
{
  float f;

  file.read(reinterpret_cast&lt;char *&gt;(&amp;f), sizeof(float));

  _values.push_back(f);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2321785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2321785</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Tue, 07 May 2013 18:14:44 GMT</pubDate></item><item><title><![CDATA[Reply to Binäre chars werden nicht mithilfe von atof in floats konvertiert on Tue, 07 May 2013 18:15:20 GMT]]></title><description><![CDATA[<pre><code>#include &lt;vector&gt;
#include &lt;sstream&gt;
#include &lt;iostream&gt;

using namespace std;

int main()
{
  // Erzeuge Daten:
  stringstream file;
  {
    vector&lt;float&gt; foo = {1.2345, 2.3456, 8.765e12};
    file.write(reinterpret_cast&lt;const char*&gt;(foo.data()), foo.size() * sizeof(float));
  }

  // Lese Daten wieder ein. Bei einer richtigen Datei würde ich stat benutzen, 
  // um die Größe zu erfahren. Hier aber mal so wie du es gemacht hast:
  file.seekg(0, ios::end);
  size_t length = file.tellg();
  file.seekg(0, ios::beg);

  vector&lt;float&gt; values(length/sizeof(float));
  file.read(reinterpret_cast&lt;char*&gt;(values.data()), length);

  for (auto value : values)
    cout &lt;&lt; value &lt;&lt; '\n';
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2321786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2321786</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 07 May 2013 18:15:20 GMT</pubDate></item><item><title><![CDATA[Reply to Binäre chars werden nicht mithilfe von atof in floats konvertiert on Tue, 07 May 2013 20:20:10 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>danke für eure schnellen und guten Antworten. Ich habe nun Th69's Vorschlag umgesetzt und es klappt alles sehr gut.</p>
<p>Danke und mfg</p>
<p>Thomas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2321819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2321819</guid><dc:creator><![CDATA[Thomas_C11]]></dc:creator><pubDate>Tue, 07 May 2013 20:20:10 GMT</pubDate></item><item><title><![CDATA[Reply to Binäre chars werden nicht mithilfe von atof in floats konvertiert on Tue, 07 May 2013 21:11:48 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Bei einer richtigen Datei würde ich stat benutzen</p>
</blockquote>
<p>Wie meinst du das? Richtige Datei?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2321824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2321824</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Tue, 07 May 2013 21:11:48 GMT</pubDate></item><item><title><![CDATA[Reply to Binäre chars werden nicht mithilfe von atof in floats konvertiert on Tue, 07 May 2013 21:53:37 GMT]]></title><description><![CDATA[<p>out schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Bei einer richtigen Datei würde ich stat benutzen</p>
</blockquote>
<p>Wie meinst du das? Richtige Datei?</p>
</blockquote>
<p>fstream statt stringstream.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2321826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2321826</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 07 May 2013 21:53:37 GMT</pubDate></item></channel></rss>