salima schrieb:
> hallo zusammen,
>
> ich versuche seit einige studen eine intger Array in unsigned char zu
> konvertieren,
Geht prinzipiell nicht immer, weil int einen groesseren Wertebereich als
char hat (OK, OK, haben kann).
> und aber könnte ich nicht sein. der kompiler meldet keine
> fehler aber die char arry bleibt immer leer und das programmm stüzt
> ab
;-)
> hier ist abschitt von Code:
> [c]
Falls das Programmiersprache C bedeuten soll - Irrtum, Du benutzt C++.
> int n=10;
> int *werte1;
> int bitrange=8; // wird von tastatur eingelesen entweder 8 oder 16 bit
> sein
> werte1=(int*)malloc(n*sizeof(int));
"werte1" ist mindestens 10 Bytes lang (C-Bytes!), wahrscheinlich aber 20
oder 40.
> for(int i=0;i<n;i++){
> werte1[i]=pow(2,bitrang)-1;
> }
Hier hast Du mit grosser Wahrscheinlichkeit "werte1[i]" mit Werten
befüllt die nicht in einen unsigned char passen werden, auf vielen
Architekturen passt (2^9)-1 nicht mehr rein.
> unsigned char *werte2;
> werte2=(unsigned char*)malloc( (n*bitrange/8)*sizeof(unsigned char) );
sizeof(unsigned char) ist per Definition 1, kannst Du weglassen.
"werte2" ist 10 Bytes lang (C-Bytes!) für bitrange == 8, 20 für bitrange
== 16.
> memcpy(werte2,werte1,n*sizeof(int))
Hier versuchst Du mit grosser Wahrscheinlichkeit 20 oder 40 Bytes in
10/20 Bytes zu kopieren.
Unwahrscheinlich dass das immer tut was es soll. ;-)
> for(int i=0;i<(n*bitrange/8) ;i++){
> cout<<werte[i]<<std::endl:
^^^^^^^^^^^^^^^^^^^^^^^^^^
C++, nicht C! Am Ende sollte ein ';' statt ':' sein, Du zeigst uns nicht
den realen Code.
> }