<?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[Position eines Zeichens im Ascii&#x2F;Ansii-Code]]></title><description><![CDATA[<p>Hallo<br />
Ich versuche das Signal aus einem WAVE-File grafisch darzustellen. Im WAVE-File sind die Daten mit 8 Bit Genauigkeit in Zeichen dargestellt, das heist, jedes Zeichen im WAVE-File entspricht einem Samplewert.</p>
<p>Mittels einem anderen C++-Programm, welches funktioniert, habe ich ein Sinussignal aufgenommen und als .wav gespeichert. Die Daten sehen nach dem Header so aus: (angefangen beim 1. Samplewert, das File ist natürlich länger, weil ich nicht ein einzelner Durchlauf aufnehmen kann)</p>
<p>€€€€€€€€€€€€€<sub>}„oAGJUaq‚’¡¬µ¹¸³ªŽ}m^RIEEJR_n</sub>žª´¸¹µ¬ ‘paTKEDHP\k{‹›¨²¸¹¶<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/00ae.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--registered"
      title=":registered:"
      alt="®"
    />¢”„tdVLFDGNZhxˆ˜¦°·</p>
<p>Die € und <br />
betrachte ich mal als Einschwingen oder so, danach widerholen sich die Zeichen nach einer Periode.</p>
<p>der vereinfachte C++-Code sieht ungefähr so aus:</p>
<pre><code class="language-cpp">//Unterprogramm dataconvert
unsigned int dataconvert(char data){     
    unsigned int MSB;
    MSB=int(data);
    return MSB;
   }

//Unterprogramm laden
void laden(void){
   for(i=0;i&lt;2048;i++){
      fscanf(f,&quot;%c&quot;,&amp;data);
      decresultarrayleft[i]=dataconvert(data);
      }
   for(i=0;i&lt;2048;i++){
      if(i==0){Form1-&gt;Image1-&gt;Canvas-&gt;MoveTo(20,height/2);}
         else
         Form1-&gt;Image1-&gt;Canvas-&gt;LineTo(20+i*3,((decresultarrayleft[i]/4)+height/2));
          }
   }
</code></pre>
<p>Das Resultat (Image1) sieht so aus: <a href="http://www.horgenberghammers.ch/sine" rel="nofollow">http://www.horgenberghammers.ch/sine</a></p>
<p>Der Sinus ist erkennbar, jedoch springt die Amplitude nach jeder Halbwelle. Mein Verdacht ist nun, dass der Befehl MSB=int(data); mit dem ASCII statt dem ANSII-Code arbeitet, oder dass beim Konvertieren von einer Variabel in die andere irgendwelche Vorzeichenfehler auftreten.<br />
Habt ihr auch schon solche Probleme gehabt und habt ihr Lösungsansätze?<br />
Danke im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/169646/position-eines-zeichens-im-ascii-ansii-code</link><generator>RSS for Node</generator><lastBuildDate>Thu, 13 Aug 2026 18:22:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/169646.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 07 Jan 2007 13:28:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Position eines Zeichens im Ascii&#x2F;Ansii-Code on Sun, 07 Jan 2007 13:28:56 GMT]]></title><description><![CDATA[<p>Hallo<br />
Ich versuche das Signal aus einem WAVE-File grafisch darzustellen. Im WAVE-File sind die Daten mit 8 Bit Genauigkeit in Zeichen dargestellt, das heist, jedes Zeichen im WAVE-File entspricht einem Samplewert.</p>
<p>Mittels einem anderen C++-Programm, welches funktioniert, habe ich ein Sinussignal aufgenommen und als .wav gespeichert. Die Daten sehen nach dem Header so aus: (angefangen beim 1. Samplewert, das File ist natürlich länger, weil ich nicht ein einzelner Durchlauf aufnehmen kann)</p>
<p>€€€€€€€€€€€€€<sub>}„oAGJUaq‚’¡¬µ¹¸³ªŽ}m^RIEEJR_n</sub>žª´¸¹µ¬ ‘paTKEDHP\k{‹›¨²¸¹¶<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/00ae.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--registered"
      title=":registered:"
      alt="®"
    />¢”„tdVLFDGNZhxˆ˜¦°·</p>
<p>Die € und <br />
betrachte ich mal als Einschwingen oder so, danach widerholen sich die Zeichen nach einer Periode.</p>
<p>der vereinfachte C++-Code sieht ungefähr so aus:</p>
<pre><code class="language-cpp">//Unterprogramm dataconvert
unsigned int dataconvert(char data){     
    unsigned int MSB;
    MSB=int(data);
    return MSB;
   }

//Unterprogramm laden
void laden(void){
   for(i=0;i&lt;2048;i++){
      fscanf(f,&quot;%c&quot;,&amp;data);
      decresultarrayleft[i]=dataconvert(data);
      }
   for(i=0;i&lt;2048;i++){
      if(i==0){Form1-&gt;Image1-&gt;Canvas-&gt;MoveTo(20,height/2);}
         else
         Form1-&gt;Image1-&gt;Canvas-&gt;LineTo(20+i*3,((decresultarrayleft[i]/4)+height/2));
          }
   }
</code></pre>
<p>Das Resultat (Image1) sieht so aus: <a href="http://www.horgenberghammers.ch/sine" rel="nofollow">http://www.horgenberghammers.ch/sine</a></p>
<p>Der Sinus ist erkennbar, jedoch springt die Amplitude nach jeder Halbwelle. Mein Verdacht ist nun, dass der Befehl MSB=int(data); mit dem ASCII statt dem ANSII-Code arbeitet, oder dass beim Konvertieren von einer Variabel in die andere irgendwelche Vorzeichenfehler auftreten.<br />
Habt ihr auch schon solche Probleme gehabt und habt ihr Lösungsansätze?<br />
Danke im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1204963</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1204963</guid><dc:creator><![CDATA[elektroniker_lehrling]]></dc:creator><pubDate>Sun, 07 Jan 2007 13:28:56 GMT</pubDate></item><item><title><![CDATA[Reply to Position eines Zeichens im Ascii&#x2F;Ansii-Code on Sun, 07 Jan 2007 13:55:01 GMT]]></title><description><![CDATA[<p>Der Link funktioniert nicht.</p>
<p>Habe keine Ahnung vom wav-Format, aber kannst du nicht gleich als <em>(unsigned) int</em> einlesen? Wozu der Umweg über <em>char</em>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1204977</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1204977</guid><dc:creator><![CDATA[Jansen]]></dc:creator><pubDate>Sun, 07 Jan 2007 13:55:01 GMT</pubDate></item><item><title><![CDATA[Reply to Position eines Zeichens im Ascii&#x2F;Ansii-Code on Sun, 07 Jan 2007 14:20:01 GMT]]></title><description><![CDATA[<p>Hallo Jansen</p>
<p>Danke für deine Antwort!</p>
<p>Bist du sicher, dass der Link nicht funktioniert? bei mier gehts...</p>
<p>Zu deinem Vorschlag: Die Idee währe super, jedoch habe ich keine Ahnung wie so etwas gehen soll. Ich kenne für das Auslesen von Daten aus Textdateien nur den Befehl 'fscanf'. Kann man damit auch int einlesen? Und weiter habe ich das Gefühl, dass das nicht funktionieren würde, denn die Samplewerte sind ja in Zeichen gespeichert, nicht in int-Werten. (oben dargestellt)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1204999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1204999</guid><dc:creator><![CDATA[elektroniker_lehrling]]></dc:creator><pubDate>Sun, 07 Jan 2007 14:20:01 GMT</pubDate></item><item><title><![CDATA[Reply to Position eines Zeichens im Ascii&#x2F;Ansii-Code on Sun, 07 Jan 2007 15:10:30 GMT]]></title><description><![CDATA[<p>Kann es sein, dass du die Datei nicht binär öffnest?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1205042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1205042</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Sun, 07 Jan 2007 15:10:30 GMT</pubDate></item><item><title><![CDATA[Reply to Position eines Zeichens im Ascii&#x2F;Ansii-Code on Sun, 07 Jan 2007 15:50:58 GMT]]></title><description><![CDATA[<p>Danke für deine Antwort.</p>
<p>Nein, ich öffne die Datei nicht Binär, da im Dateiheader auch noch Zeichen enthalten sind, die ich nicht umwandeln muss. Allerdings könnte ich das vorerst einfach mal weglassen...</p>
<p>Also, gehen wir mal davon aus, dass ich die Datei nun Binär öffne:</p>
<pre><code class="language-cpp">f=fopen(&quot;C:/test.wav&quot;,&quot;r+b&quot;);
fseek(f,48,SEEK_SET);
</code></pre>
<p>Vor dem ersten Sample-Wert im Dateiheader stehen 48 Zeichen (8-Bit). Die gillt es nun zu überspringen. Funktioniert das so? Irgendwie müsste ich doch dem fseek noch sagen, das er 48 mal 8 Bit überspringen muss. Eigentich müsste das ganze aber auch so funktionieren, oder:</p>
<pre><code class="language-cpp">int nichts,i,data;

f=fopen(&quot;C:/test.wav&quot;,&quot;r+b&quot;);
for(i=0;i&lt;48;i++)
   fread(&amp;nichts, sizeof(nichts),1,f);
</code></pre>
<p>Dan währe ich auch an der Position des ersten Sample-Wertes, oder?</p>
<p>Und danach der Lesebefehl:</p>
<pre><code class="language-cpp">fread(&amp;data, sizeof(data),1,f);
</code></pre>
<p>Müsste dan nicht die Variabel 'data' genau 8 Bit lang sein, dass das Programm auch nur 8 Bit ausliest und der Zeiger für den nächsten Lesebefehl an der richtigen Position steht?<br />
Und wie definiert man eine genau 8-Bit grosse Variabel?<br />
Danke für eure Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1205062</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1205062</guid><dc:creator><![CDATA[elektroniker_lehrling]]></dc:creator><pubDate>Sun, 07 Jan 2007 15:50:58 GMT</pubDate></item><item><title><![CDATA[Reply to Position eines Zeichens im Ascii&#x2F;Ansii-Code on Mon, 08 Jan 2007 00:04:12 GMT]]></title><description><![CDATA[<p>es gibt noch mehr Filehandling FUnktionen fseek zum Beispiel ist hier auch klar dein Freund.</p>
<p>Was die Variablengrösse betrifft: nein, sie müsste nicht 8 Bit gross sein. Datentypengrössen sind entweder abhängig von der Maschinengrösse oder fix breit. Niemals jedoch variabel.</p>
<p>char ist eine 8-Bit Variabel. Das ist jedoch irelevant, denn du bestimmst ja wie viel aus der Datei ausgelesen wird. Benutz dafür vielleicht eher fread als fscanf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1205355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1205355</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Mon, 08 Jan 2007 00:04:12 GMT</pubDate></item><item><title><![CDATA[Reply to Position eines Zeichens im Ascii&#x2F;Ansii-Code on Mon, 08 Jan 2007 15:18:55 GMT]]></title><description><![CDATA[<p>Danke für deine Antwort.<br />
Deinen Informationen zufolge interpretiere ich, dass ich den Zeiger nun folgendermassen auf das 48. Bit setze:</p>
<pre><code class="language-cpp">fread(&amp;data, sizeof(data),384,SEEK_SET);
</code></pre>
<p>die 384 beziehen sich auf die 48*8Bit, die als Offset angegeben werden. Ich gehe hier mal davon aus, das man den Offset in Bits angiebt.</p>
<p>und wenn 'data' nun irgendeine int-variabel ist, funktioniert das wirklich, dass danach nach jedem Lesebefehl immer genau den Wert eines Zeichens in der Int-Variabel steht?</p>
<pre><code class="language-cpp">Binär-File:    01111000    1110100001110000001111100001110111....
               ¦1.Zeichen¦ ¦2.Z    ¦ 3.Z   ¦
</code></pre>
<p>Wiso habe ich nun den Wert von genau 8 Bits in meiner 32-Bit Int-Variabel?<br />
Funktioniert das wirklich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1205738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1205738</guid><dc:creator><![CDATA[elektroniker_lehrling]]></dc:creator><pubDate>Mon, 08 Jan 2007 15:18:55 GMT</pubDate></item><item><title><![CDATA[Reply to Position eines Zeichens im Ascii&#x2F;Ansii-Code on Mon, 08 Jan 2007 15:37:34 GMT]]></title><description><![CDATA[<p>Schon mal die Dokumentation zu fseek und fread gelesen? Sieht jedenfalls nciht danach aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1205748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1205748</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Mon, 08 Jan 2007 15:37:34 GMT</pubDate></item></channel></rss>