Konvertierung von integer Array nach unsigned char Array
-
hallo zusammen,
ich versuche seit einige studen eine intger Array in unsigned char zu konvertieren, 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:int n=10; int *werte1; int bitrange=8; // wird von tastatur eingelesen entweder 8 oder 16 bit sein werte1=(int*)malloc(n*sizeof(int)); for(int i=0;i<n;i++){ werte1[i]=pow(2,bitrang)-1; } unsigned char *werte2; werte2=(unsigned char*)malloc( (n*bitrange/8)*sizeof(unsigned char) ); memcpy(werte2,werte1,n*sizeof(int)) for(int i=0;i<(n*bitrange/8) ;i++){ cout<<werte[i]<<std::endl: } free(werte1); free(werte2);
ich hoffe dass, jemand mir weiterhelfen kann.
danke schönmal im voraus.
Gruß
Salima
-
Das Array werte2 ist ist kleiner als werte1. D.h. memcpy greift mit der gegebenen Laengenangabe ausserhalb von werte2 zu und verursacht eine Speicherzugriffsverletzung. Darueber hinaus taucht in der for-Schleife noch eine Variable
werte
auf, die sich vonwerte1
undwerte2
unterscheidet. Lass dir doch maln*sizeof(int)
undn*bitrange/8)*sizeof(unsigned char)
ausgeben.
-
sorry
ich habe es nich von einem code genommen sonern habe es schnell
eingetippt,aber wie gesagt das problem besteht immer nochint n=10; int *werte1; int bitrange=8; // wird von tastatur eingelesen entweder 8 oder 16 bit sein werte1=(int*)malloc(n*sizeof(int)); for(int i=0;i<n;i++){ werte1[i]=pow(2,bitrang)-1; } unsigned char *werte2; werte2=(unsigned char*)malloc( (n*bitrange/8)*sizeof(unsigned char) ); memcpy(werte2,werte1,n*sizeof(int)) for(int i=0;i<(n*bitrange/8) ;i++){ cout<<werte2[i]<<std::endl; } free(werte1); free(werte2);
-
Die erste Hälfte von knivils Antwort gilt immer noch. Und Tipp bei Fehlern niemals den Code einfach ab, sondern immer Copy & Paste. Du siehst selber, warum.
-
leider komme ich nicht weiter. ich habe es so geandert, dass die beiden Vektoren zumindest die gleiche länge haben aber die werte1 werden einfach in werte2 copiert,denn array werte2 ist immer noch leer.
[/cpp]
int n=10;
int werte1;
int bitrange=8; // wird von tastatur eingelesen entweder 8 oder 16 bit sein
werte1=(int)malloc(n*sizeof(int));for(int i=0;i<n;i++){
werte1[i]=pow(2,bitrang)-1;
}unsigned char werte2;
werte2=(unsigned char)malloc( (n*bitrange/8)*sizeof(int) );memcpy(werte2,werte1,n*sizeof(int))
for(int i=0;i<(n*bitrange/8) ;i++){
cout<<werte2[i]<<std::endl;}
free(werte1);
free(werte2);
[cpp]
-
#include <iostream> using namespace std; int main() { int array_int[5]={100,100,100,100,100}; //unsigned char *array_uchar=reinterpret_cast<unsigned char *>(array_int); in C++ unsigned char *array_uchar=(unsigned char *)array_int; for(unsigned char i=0; i<5*sizeof(int); ++i) printf("%i\t", array_uchar[i]); for(;;); }
Dürfte funktionieren, 3 Bytes sind 0, im letzten steht 100.
-
Damit die Felder gleich groß sind:
int *werte1; werte1=(int*)malloc(n*sizeof(int)); // der cast vor malloc ist nur bei C++ nötig unsigned char *werte2; werte2=(unsigned char*)malloc(n*sizeof(int)); // der cast vor malloc ist nur bei C++ nötig
salima schrieb:
ich versuche seit einige studen eine intger Array in unsigned char zu konvertieren
Warum willst du das überhaupt machen?
Vielleicht ist das alles gar nicht nötig.
-
salima schrieb:
leider komme ich nicht weiter. ich habe es so geandert, dass die beiden Vektoren zumindest die gleiche länge haben aber die werte1 werden einfach in werte2 copiert,denn array werte2 ist immer noch leer.
[/cpp]
int n=10;
int werte1;
int bitrange=8; // wird von tastatur eingelesen entweder 8 oder 16 bit sein
werte1=(int)malloc(n*sizeof(int));for(int i=0;i<n;i++){
werte1[i]=pow(2,bitrang)-1;
}unsigned char werte2;
werte2=(unsigned char)malloc( (n*bitrange/8)*sizeof(int) );memcpy(werte2,werte1,n*sizeof(int))
for(int i=0;i<(n*bitrange/8) ;i++){
cout<<werte2[i]<<std::endl;}
free(werte1);
free(werte2);
[cpp]1. Das ist schon wieder nicht der Code den du benutzt, sondern irgendetwas was du abgetippt hast.
Hör auf, uns anzulügen!
2. Der Code funktioniert, wenn man ihn berichtigt. Du verstehst bloß das Ergebnis nicht. Wenn du Zahlen als Zeichen ausgibst, dann sind diese eben größtenteils unsichtbar.
3. C oder C++? Das ist keine gültiges C und kein richtiges C++.