<?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[char zu long konvertieren]]></title><description><![CDATA[<p>hallo ich möchte die samples eines Musikstückes ( 16 bit, 44,1 khz, stereo)<br />
in long werte umwandeln</p>
<p>angenommen ich habe einen Teil des Stückes zum Beispiel 1152 samples pro kanal, das entspricht 4608 byte ( bei den oben genannten parametern),<br />
also 2 byte pro sample</p>
<p>jetzt möchte ich, da 16 bit die 2 byte zusammenfassen zu einem short wert</p>
<pre><code>char *samples;

const short *samplesAlsShort = (short *)samples;
</code></pre>
<p>Ist dieser Cast Prozessor unabhängig???? Was geschieht mit den 2 byte, wie werden sie zusammengefasst?</p>
<p>Dann möchte ich die short zu long casten und mono daraus machen:</p>
<pre><code>int size = 4608/4

for(int i = 0; i&lt; size; ++i, ++samplesAlsShort)
{
float samplesAlsLong = ((float)(((int)*samplesAlsShort)/ 32768 + ((int)*++samplesAlsShort)/32768))/2     
    (*m_input)[i] = sampleAslong;
}
</code></pre>
<p>Meint ihr diese Anweisungen sind so Korrekt? Wo könnte es probleme geben?<br />
Es kommen werte heraus...ich möchte nur sicher gehen das sie Richtig sind.</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/143361/char-zu-long-konvertieren</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 04:03:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/143361.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 07 Apr 2006 15:35:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to char zu long konvertieren on Fri, 07 Apr 2006 15:35:32 GMT]]></title><description><![CDATA[<p>hallo ich möchte die samples eines Musikstückes ( 16 bit, 44,1 khz, stereo)<br />
in long werte umwandeln</p>
<p>angenommen ich habe einen Teil des Stückes zum Beispiel 1152 samples pro kanal, das entspricht 4608 byte ( bei den oben genannten parametern),<br />
also 2 byte pro sample</p>
<p>jetzt möchte ich, da 16 bit die 2 byte zusammenfassen zu einem short wert</p>
<pre><code>char *samples;

const short *samplesAlsShort = (short *)samples;
</code></pre>
<p>Ist dieser Cast Prozessor unabhängig???? Was geschieht mit den 2 byte, wie werden sie zusammengefasst?</p>
<p>Dann möchte ich die short zu long casten und mono daraus machen:</p>
<pre><code>int size = 4608/4

for(int i = 0; i&lt; size; ++i, ++samplesAlsShort)
{
float samplesAlsLong = ((float)(((int)*samplesAlsShort)/ 32768 + ((int)*++samplesAlsShort)/32768))/2     
    (*m_input)[i] = sampleAslong;
}
</code></pre>
<p>Meint ihr diese Anweisungen sind so Korrekt? Wo könnte es probleme geben?<br />
Es kommen werte heraus...ich möchte nur sicher gehen das sie Richtig sind.</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1032768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1032768</guid><dc:creator><![CDATA[copper]]></dc:creator><pubDate>Fri, 07 Apr 2006 15:35:32 GMT</pubDate></item><item><title><![CDATA[Reply to char zu long konvertieren on Fri, 07 Apr 2006 15:41:41 GMT]]></title><description><![CDATA[<p>Der Cast ist definitiv nicht vom Prozessor abhängig - je nach System wird &quot;*samplesAsShort&quot; entweder &quot;samples[0]+samples[1]&lt;&lt;8&quot; oder anderherum sein. Genauso sieht es bei dem Gebilde darunter aus. Wenn du dir bei der Byte-Reihenfolge sicher sein willst, mußt du das manuell zusammensetzen:</p>
<pre><code class="language-cpp">char* data;
short sdat = data[0]+data[1]&lt;&lt;8;
long  ldat = data[0]+data[1]&lt;&lt;8+data[2]&lt;&lt;16+data[3]&lt;&lt;24;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1032778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1032778</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 07 Apr 2006 15:41:41 GMT</pubDate></item><item><title><![CDATA[Reply to char zu long konvertieren on Fri, 07 Apr 2006 15:47:09 GMT]]></title><description><![CDATA[<p>erstmal danke für die antwort,</p>
<p>ich habe in meinem ersten posting etwas verwechselt:</p>
<p>ich möchte natürlich die short zu float casten und nicht zu long<br />
so wie es auch im quelltext steht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1032781</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1032781</guid><dc:creator><![CDATA[copper]]></dc:creator><pubDate>Fri, 07 Apr 2006 15:47:09 GMT</pubDate></item><item><title><![CDATA[Reply to char zu long konvertieren on Fri, 07 Apr 2006 15:53:06 GMT]]></title><description><![CDATA[<p>Wenn du nur den Mittelwert aus den beiden short's bestimmen willst, solltest du bei der Ganzzahl-Arithmetik bleiben. Andernfalls wäre es angebracht, die Ausgangswerte der Rechnung schon nach float zu casten:</p>
<pre><code class="language-cpp">float val = ( (float)sdat[0] + (float)sdat[1] )/65536.0f;
</code></pre>
<p>(int-Divisionen schneiden die Nachkommastellen ab - da dürftest du als Ergebnis konstant 0 erhalten, egal was du reinsteckst)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1032783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1032783</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 07 Apr 2006 15:53:06 GMT</pubDate></item><item><title><![CDATA[Reply to char zu long konvertieren on Fri, 07 Apr 2006 16:47:36 GMT]]></title><description><![CDATA[<p>ich habe mir jetzt noch mal eine andere Variante überlegt</p>
<pre><code>for(int n =0; 4608/4;++n)
{
 float sampleAsfloat = (((float) ((unsigned char) data[(n*4)] + (data[(n*4) + 1] &lt;&lt; 8)) / 32768) + ((float) ((unsigned char) data[(n*4)+2] + (data[(n*4) + 3] &lt;&lt; 8)) / 32768)) / 2.0f;
    (*m_input2)[n] = sampleAsfloat;
    cout &lt;&lt; (*m_input2)[n] &lt;&lt; endl;
}
</code></pre>
<p>leider kommen andere Werte al bei dir raus... hast du eine Idee Warum?</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1032826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1032826</guid><dc:creator><![CDATA[copper]]></dc:creator><pubDate>Fri, 07 Apr 2006 16:47:36 GMT</pubDate></item></channel></rss>