<?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[Konvertierung von intger Arry zu unsigned char Arry]]></title><description><![CDATA[<p>hallo zusammen,</p>
<p>ich habe hier ein Problem,eine intger Array in unsigned char zu<br />
konvertieren. der kompiler meldet keine<br />
fehler aber die char arry bleibt immer leer.<br />
ich hab erstmal versucht,einen unsigned char pointer auf den int pointer zeigen lassen und dann die werte Byte zu Byte in char Array zu kopieren aber die Casting funktioniert nicht richtig.<br />
hier ist mein Code:</p>
<pre><code class="language-cpp">int samples   = 100;
        int bitrange   = 16;

        int  val  = 0;
        int* pVal = 0;
        unsigned char  byte  = 0;
        unsigned char* pByte = 0;

        int *intBuf            = new  int[samples]; 
        unsigned char *charBuf = new unsigned char[samples*bitrange/8]; 
          int i,x,j;
           for(i=0,x=0;i&lt;samples;i++)
       {      int y=pow(2,bitrange)-1;
                  intBuf[i]=(int)y*sin(i*2*3.14/samples);

                  val = intBuf[i]; 
                  pVal = &amp;val; 
          //einen unsigned char pointer auf den int pointer zeigen lassen
                  pByte = reinterpret_cast&lt;unsigned char*&gt;(pVal);     
                //std::cout&lt;&lt;&quot;charByte=&quot;&lt;&lt;*pByte&lt;&lt;&quot;&quot;&lt;&lt;&quot;pval=&quot;&lt;&lt;*pVal&lt;&lt;std::endl;
                  // das byte im buffer speichern            
               for(j=0; j&lt;(int)bitrange/8; j++, pByte++)      
                    {  // das byte im char buffer speichern
                        charBuf[x] = *pByte;               

        std::cout&lt;&lt;&quot;x=&quot;&lt;&lt;x &lt;&lt;&quot;charbuf=&quot;&lt;&lt;charBuf[x]&lt;&lt;&quot;&quot;&lt;&lt;&quot;intBuf=&quot;&lt;&lt; intBuf[i]&lt;&lt;std::endl;
                   x++;
                   }

            }

          delete [] intBuf;          
          delete [] charBuf;
 return 0;
</code></pre>
<p>hier ist Teil der Ausgabe</p>
<pre><code class="language-cpp">x=0charbuf=intBuf=0
x=1charbuf=intBuf=0
charByte=pval=4112
x=2charbuf=intBuf=4112
x=3charbuf=intBuf=4112
charByte=pval=8209
x=4charbuf=intBuf=8209
x=5charbuf= intBuf=8209
</code></pre>
<p>ich hoffe dass, jemand mir weiterhelfen kann.<br />
danke schönmal im voraus.<br />
Gruß<br />
Salima</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/300907/konvertierung-von-intger-arry-zu-unsigned-char-arry</link><generator>RSS for Node</generator><lastBuildDate>Wed, 12 Aug 2026 12:18:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/300907.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 13 Mar 2012 23:39:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Konvertierung von intger Arry zu unsigned char Arry on Tue, 13 Mar 2012 23:39:53 GMT]]></title><description><![CDATA[<p>hallo zusammen,</p>
<p>ich habe hier ein Problem,eine intger Array in unsigned char zu<br />
konvertieren. der kompiler meldet keine<br />
fehler aber die char arry bleibt immer leer.<br />
ich hab erstmal versucht,einen unsigned char pointer auf den int pointer zeigen lassen und dann die werte Byte zu Byte in char Array zu kopieren aber die Casting funktioniert nicht richtig.<br />
hier ist mein Code:</p>
<pre><code class="language-cpp">int samples   = 100;
        int bitrange   = 16;

        int  val  = 0;
        int* pVal = 0;
        unsigned char  byte  = 0;
        unsigned char* pByte = 0;

        int *intBuf            = new  int[samples]; 
        unsigned char *charBuf = new unsigned char[samples*bitrange/8]; 
          int i,x,j;
           for(i=0,x=0;i&lt;samples;i++)
       {      int y=pow(2,bitrange)-1;
                  intBuf[i]=(int)y*sin(i*2*3.14/samples);

                  val = intBuf[i]; 
                  pVal = &amp;val; 
          //einen unsigned char pointer auf den int pointer zeigen lassen
                  pByte = reinterpret_cast&lt;unsigned char*&gt;(pVal);     
                //std::cout&lt;&lt;&quot;charByte=&quot;&lt;&lt;*pByte&lt;&lt;&quot;&quot;&lt;&lt;&quot;pval=&quot;&lt;&lt;*pVal&lt;&lt;std::endl;
                  // das byte im buffer speichern            
               for(j=0; j&lt;(int)bitrange/8; j++, pByte++)      
                    {  // das byte im char buffer speichern
                        charBuf[x] = *pByte;               

        std::cout&lt;&lt;&quot;x=&quot;&lt;&lt;x &lt;&lt;&quot;charbuf=&quot;&lt;&lt;charBuf[x]&lt;&lt;&quot;&quot;&lt;&lt;&quot;intBuf=&quot;&lt;&lt; intBuf[i]&lt;&lt;std::endl;
                   x++;
                   }

            }

          delete [] intBuf;          
          delete [] charBuf;
 return 0;
</code></pre>
<p>hier ist Teil der Ausgabe</p>
<pre><code class="language-cpp">x=0charbuf=intBuf=0
x=1charbuf=intBuf=0
charByte=pval=4112
x=2charbuf=intBuf=4112
x=3charbuf=intBuf=4112
charByte=pval=8209
x=4charbuf=intBuf=8209
x=5charbuf= intBuf=8209
</code></pre>
<p>ich hoffe dass, jemand mir weiterhelfen kann.<br />
danke schönmal im voraus.<br />
Gruß<br />
Salima</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2191402</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2191402</guid><dc:creator><![CDATA[salima]]></dc:creator><pubDate>Tue, 13 Mar 2012 23:39:53 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung von intger Arry zu unsigned char Arry on Wed, 14 Mar 2012 00:23:08 GMT]]></title><description><![CDATA[<p>Wichtig: Was soll mit den Werten hinterher geschehen?<br />
Warum benutzt du keine std::vector?<br />
Woher kommen die magischen Zahlen? Die passen, wenn ich das richtig sehe auch gar nicht zueinander, sofern sizeof(int) nicht 2 ist, was sehr ungewöhnlich wäre.<br />
Was sollen die ganzen unnötigen Casts, Hilfsvariablen, Zwischenschritte und inkonsistene Benutzung der Kontrollstrukuren? Ist das Programm sauberer geschrieben, dann funktioniert es erfahrungsgemäß auch eher auf Anhieb.<br />
Hast du mal den Kontrollfluss auf dem Papier und im Debugger nachvollzogen und verglichen? Da macht garantiert einiges (eigentlich fast alles) nicht das, was du denkst, was es macht.</p>
<p>Wichtig: Was hältst du eigentlich von folgendem Thread?<br />
<a href="http://www.c-plusplus.net/forum/p2184977" rel="nofollow">http://www.c-plusplus.net/forum/p2184977</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2191403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2191403</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 14 Mar 2012 00:23:08 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung von intger Arry zu unsigned char Arry on Wed, 14 Mar 2012 00:22:18 GMT]]></title><description><![CDATA[<p>Du musst dir dafür mal vorstellen wie Pointer funktionieren. Angenommen du hast 8 byte Speicher und ints sind 2 byte groß:</p>
<pre><code>// Bitte beachte: Das sind fiktive Zahlen, der Standard definiert diese Größen nicht exakt.
// (Außer dass char genau 1 Byte groß ist.)
[][][][][][][][] // Der Speicher
int* p = (int*)2; // Zeigt jetzt auf das 3. Byte (Natürlich schlechte Idee in richtigem Code. ;))
std::cout &lt;&lt; *p; // Liest das 3.und 4. Byte aus, da integer 2 Byte groß sind.
++p; // Zeigt jetzt auf das 5.Byte!
unsigned char* q = p; // Zeigt immer noch auf das 5. Byte
std::cout &lt;&lt; *q; // Liest das 5. Byte aus, da unsigned char 1 Byte groß ist.
++q; // q zeigt jetzt auf das 6. Byte
</code></pre>
<p>Ich hoffe dir ist jetzt klar, warum so ein reinterpret_cast hier eine schlechte Idee ist.</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; v(100); // 100 ints
std::vector&lt;unsigned char&gt; v2(100); // 100 unsigned chars

for (int i = v.size(); i-- != 0; )
{
  v2[i] = v[i];
}
</code></pre>
<p>So einfach geht das. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2191404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2191404</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Wed, 14 Mar 2012 00:22:18 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung von intger Arry zu unsigned char Arry on Wed, 14 Mar 2012 00:45:18 GMT]]></title><description><![CDATA[<p>hallo cooky451,</p>
<p>leider so einfach ist es nicht.<br />
char vektor muss in diesem fall doppelt so größe wie das int Vektor und hab was du vorgeschlagt probierst leider besteht immer noch das gleiche problem</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; intBuf(samples); 
  std::vector&lt;unsigned char&gt; charBuf(samples);
  int i,x,j;
           for(i=0,x=0;i&lt;samples;i++)
 {      int y=pow(2,bitrange)-1;
        intBuf[i]=(int)y*sin(i*2*3.14/samples);
}

  for (int i = intBuf.size(); i-- != 0; )
{
    charBuf[i]= intBuf[i];
   std::cout&lt;&lt;&quot;i=&quot;&lt;&lt;i &lt;&lt;&quot;charbuf=&quot;&lt;&lt;charBuf[i]&lt;&lt;&quot;&quot;&lt;&lt;&quot;intBuf=&quot;&lt;&lt; intBuf[i]&lt;&lt;std::endl;
} 

        //  delete [] intBuf;          
         // delete [] charBuf;
 return 0;
</code></pre>
<p>sad was raus kommt:</p>
<pre><code class="language-cpp">i=99charbuf=intBuf=-4321
i=98charbuf= intBuf=-8416
i=97charbuf=BintBuf=-12478
i=96charbuf=�intBuf=-16491
i=95charbuf=)intBuf=-20439
intBuf=-24307
i=93charbuf=RintBuf=-28078
..
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2191405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2191405</guid><dc:creator><![CDATA[salima]]></dc:creator><pubDate>Wed, 14 Mar 2012 00:45:18 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung von intger Arry zu unsigned char Arry on Wed, 14 Mar 2012 01:14:49 GMT]]></title><description><![CDATA[<p>Natürlich funktioniert das. Das Problem ist, wenn du einen char ausgibst, wird dieser von der Ausgabe als Buchstabe interpretiert. Das willst du aber nicht, du willst wissen welchen Wert er hat. (Als Zahl.)<br />
Daher musst du vor der Ausgabe nach unsigned int casten:</p>
<pre><code class="language-cpp">int main()
{
	const std::size_t size = 100;
	std::vector&lt;int&gt; int_buf(size);
	std::vector&lt;unsigned char&gt; char_buf(size);

	for(std::size_t i = 0; i != size; ++i)
	{
		int_buf[i] = i;
	}

	for (int i = int_buf.size(); i-- != 0; )
	{
		char_buf[i] = static_cast&lt;unsigned char&gt;(int_buf[i]);
		std::cout &lt;&lt; i &lt;&lt; &quot;: &quot; &lt;&lt; static_cast&lt;unsigned int&gt;(char_buf[i]) &lt;&lt; '\n';
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2191406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2191406</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Wed, 14 Mar 2012 01:14:49 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung von intger Arry zu unsigned char Arry on Wed, 14 Mar 2012 10:30:55 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;vector&gt;

using namespace std;

int main()
{
   vector&lt;int&gt; iv;
   vector&lt;unsigned char&gt; ucv;

   if( !iv.empty() )
   {
      unsigned char* Buf = reinterpret_cast&lt;unsigned char*&gt;( &amp;iv[0] );
      size_t Size = iv.size() * (sizeof( int ) / sizeof( unsigned char ));

      ucv.assign( Buf, Buf + Size );
   }
}
</code></pre>
<p>Edit:<br />
end iterator fixed</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2191457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2191457</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Wed, 14 Mar 2012 10:30:55 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung von intger Arry zu unsigned char Arry on Wed, 14 Mar 2012 11:56:32 GMT]]></title><description><![CDATA[<p>Soll das ein Witz sein? Der char vector ist danach 4 mal so groß, und das was da passiert ist letztlich memcpy().</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2191527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2191527</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Wed, 14 Mar 2012 11:56:32 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung von intger Arry zu unsigned char Arry on Wed, 14 Mar 2012 12:15:10 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>Soll das ein Witz sein? Der char vector ist danach 4 mal so groß, und das was da passiert ist letztlich memcpy().</p>
</blockquote>
<p>Jau, allerdings ist das genau die Anforderung, die TE gefordert hat. Wenn er einfach nur einen Zeiger auf den Speicherbereich haben will kann er ab Zeile 12 aufhören. Was weiß ich, was er mit dem Vektor vorhat, da fehlen einfach Informationen.</p>
<p>Edit:<br />
Und nein, das ist kein Witz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2191541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2191541</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Wed, 14 Mar 2012 12:15:10 GMT</pubDate></item><item><title><![CDATA[Reply to Konvertierung von intger Arry zu unsigned char Arry on Wed, 14 Mar 2012 12:35:09 GMT]]></title><description><![CDATA[<p>Und warum nicht</p>
<pre><code class="language-cpp">std::vector&lt;unsigned char&gt; char_buf(int_buf.size() * sizeof(int_buf[0]));
std::memcpy(&amp;char_buf[0], &amp;int_buf[0], char_buf.size());
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2191548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2191548</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Wed, 14 Mar 2012 12:35:09 GMT</pubDate></item></channel></rss>