Forum: PC-Programmierung Konvertierung von intger Arry zu unsigned char Arry


von Selima (Gast)


Lesenswert?

hallo zusammen,

ich habe hier ein Problem,eine intger Array in unsigned char zu
konvertieren. der kompiler meldet keine
fehler aber die  char arry  bleibt  immer leer.
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.
hier ist mein Code:
1
        int samples   = 100;
2
        int bitrange   = 16;
3
4
        int  val  = 0;
5
        int* pVal = 0;
6
        unsigned char  byte  = 0;
7
        unsigned char* pByte = 0;
8
        
9
        int *intBuf            = new  int[samples]; 
10
        unsigned char *charBuf = new unsigned char[samples*bitrange/8]; 
11
          int i,x,j;
12
           for(i=0,x=0;i<samples;i++)
13
       {      int y=pow(2,bitrange)-1;
14
                  intBuf[i]=(int)y*sin(i*2*3.14/samples);
15
                       
16
                  val = intBuf[i]; 
17
                  pVal = &val; 
18
          //einen unsigned char pointer auf den int pointer zeigen lassen
19
                  pByte = reinterpret_cast<unsigned char*>(pVal);     
20
                //std::cout<<"charByte="<<*pByte<<""<<"pval="<<*pVal<<std::endl;
21
                  // das byte im buffer speichern            
22
               for(j=0; j<(int)bitrange/8; j++, pByte++)      
23
                    {  // das byte im char buffer speichern
24
                        charBuf[x] = *pByte;               
25
             
26
        std::cout<<"x="<<x <<"charbuf="<<charBuf[x]<<""<<"intBuf="<< intBuf[i]<<std::endl;
27
                   x++;
28
                   }
29
 
30
            }
31
32
          delete [] intBuf;          
33
          delete [] charBuf;
34
 return 0;
hier ist Teil der Ausgabe
1
x=0charbuf=intBuf=0
2
x=1charbuf=intBuf=0
3
charByte=pval=4112
4
x=2charbuf=intBuf=4112
5
x=3charbuf=intBuf=4112
6
charByte=pval=8209
7
x=4charbuf=intBuf=8209
8
x=5charbuf= intBuf=8209

ich hoffe dass, jemand mir weiterhelfen kann.
danke schönmal im voraus.
Gruß
Salima

von Frank M. (aktenasche)


Lesenswert?

also erstmal ist int (plattformabhängig) eigentlich immer mehr als ein 
byte daher macht der cast wenig sinn. zweitenst verstehe ich nicht weas 
du machen willst. ein int array in einen char umwandeln? geht nicht.
kopiere doch bitte die codestellen raus die relevant sind.

von DirkB (Gast)


Lesenswert?

Warum willst du das umwandeln?
Dann kann man dir auch sagen wie du es machen musst. Evtl. muss das ja 
gar nicht sein

von Rolf M. (rmagnus)


Lesenswert?

Selima schrieb:
> ich habe hier ein Problem,eine intger Array in unsigned char zu
> konvertieren.

Also jedes int aus dem Quell-Array in ein unsigned char im Ziel-Array? 
Danach klingt diese Aussage, aber der Code scheint etwas anderes zu 
versuchen, und das hier:

> 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

läßt auch Fragen offen, was du denn nun genau willst. In deinem Code ist 
bitrange 16, aber wenn du nicht gerade unter DOS oder so programmierst, 
ist int normalerweise 32 Bit breit. Willst du von jedem int nur die 
Hälfte nehmen und davon wiederum die obere und untere Hälfte jeweils in 
einem unsigned char speichern?

> aber die Casting funktioniert nicht richtig.

Was heißt "funktioniert nicht richtig"?

von Reinhard Kern (Gast)


Lesenswert?

Selima schrieb:
> charBuf[x] = *pByte;

Mal abgesehen von int und char: wo zählst du x hoch? und wieso x und 
nicht i?
Die arrays müssen doch gleichviele Einträge haben.

Gruss Reinhard

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.