Buffer auslesen



  • Hallo, das unstenstehende Programm funktioniert soweit
    nur sobald ich im main Programm scale_factor ein wert von über 127 übergib
    bringt mir beim anschließenden auslesen des Buffers also ein falschen wert zurück!!!

    wie änder ich das Programm damit ich auch größere werte als 127 im Buffer speichern und auslesen kann???

    Wictig ist ich will die werte unbedingt in einem Buffer speichern

    vielen dank mal oli

    #include <iostream>
    
    using namespace std;
    
    char *descBuffer();
    int scale_factor();  
    int scale_factor(unsigned int n);
    
    char* Buffer;
    
    int main()
    {
    
      Buffer= new char[20];   
      memset(Buffer,'0',20); //OK
    
      scale_factor(222); //sobald hier ein wert von über 127 ist tut es nicht mehr!!!
    
      cout << "scale_factor: "<<scale_factor()<<endl;
    
    return 0;
    }
    
    char* descBuffer()
    {
       return Buffer;                                              //OK
    }
    
    int scale_factor()  
    {
      fprintf(stderr,"das les ich aus dem Buffer aus %d \n\n",(int)descBuffer()[3]);
      return  (int)descBuffer()[3]; 
    }
    
    //scale_factor write Method
    int scale_factor(unsigned int n)
    {
    
       fprintf(stderr,"das schreib ich in Buffer %d \n\n",n);
    
       memcpy(&descBuffer()[3],&n,4); 
       return 0;
    }
    

    /* Ausgabe bei scalefactor(222)

    das schreib ich in Buffer 222

    das les ich aus dem Buffer aus -34

    scale_factor: -34

    Ausgabe bei bei scale factor 114:

    das schreib ich in Buffer 114

    das les ich aus dem Buffer aus 114

    scale_factor: 114



  • char geht nur von -127 bis +127.

    222 - 127 = 95
    -127 + 95 = -32



  • ja ok aber wie änder ich das programm jetzt dass es auch für integer also größere werte funktioniert???



  • the_alien schrieb:

    char geht nur von -127 bis +127.

    Wie der Wertebereich von char aussieht, hängt von der Implementation ab. Und wenn, dann ginge der von -128 bis 127.

    @oli23
    Wenn du schon C++ schreibst, wieso verwendest du dann nicht die Ein-/Ausgabe Streams? Dann wären auch nicht solche Typinkonsistenzen passiert.

    fprintf(stderr,"das schreib ich in Buffer %d \n\n",n);
    

    n ist unsigned, also muss das Format %u beinhalten.

    memcpy(&descBuffer()[3],&n,4);
    

    Warum so umständlich? Und so falsch? Dir ist schon klar, dass gleich 4 Zeichen in Buffer überschrieben werden?

    Vielleicht wolltest du eher sowas?

    descBuffer()[3] = int(n);
    

    btw:
    Du hast ein astreines Speicherleck.



  • Wenn du schon C++ schreibst, wieso verwendest du dann nicht die Ein-/Ausgabe Streams? Dann wären auch nicht solche Typinkonsistenzen passiert.

    ok hab ich geändert

    memcpy(&descBuffer()[3],&n,4);

    Warum so umständlich? Und so falsch? Dir ist schon klar, dass gleich 4 Zeichen in Buffer überschrieben werden?

    nein ich wollte nur die Adresse von n in des Buffer kopieren und gleich 4 zeichen weil doch int 4 Byte hat....

    habs aber so geändert wie du vorgeschlagen hast....

    Hab aber immernoch dasselbe Problem bei zahlen über 127 bekomm ich falsche werte zurück

    des neuen code nochmal

    #include <iostream> 
    
     using namespace std; 
    
     char *descBuffer(); 
     int scale_factor(); 
     int scale_factor(unsigned int n); 
      char* Buffer; 
    
     int main() 
     { 
    
     Buffer= new char[20]; 
     memset(Buffer,'0',20); //OK 
    
     scale_factor(222); //sobald hier ein wert von ueber 127 ist tut es nicht mehr!!! 
    
     cout << "scale_factor: "<<scale_factor()<<endl; 
    
     return 0; 
     } 
    
     char* descBuffer() 
     { 
     return Buffer; //OK 
     } 
    
     int scale_factor() 
     { 
     cout <<"das les ich aus dem Buffer aus "<< (int)descBuffer()[3]<<endl;
    
     return (int)descBuffer()[3]; 
     } 
    
     //scale_factor write Method 
     int scale_factor(unsigned int n) 
     { 
     cout<< "das schreib ich in den Buffer "<<n<<endl; 
    
     descBuffer()[3] = int(n);
     //memcpy(&descBuffer()[3],&n,4); 
     return 0; 
     }
    


  • oli 23 schrieb:

    habs aber so geändert wie du vorgeschlagen hast....

    Hab aber immernoch dasselbe Problem bei zahlen über 127 bekomm ich falsche werte zurück

    Dann solltest du deine Vorgehensweise nochmal überdenken.

    int scale_factor(unsigned int n)
    

    nimmt als Parameter nunmal einen unsigned int Wert

    int scale_factor()
    

    gibt aber einen (signed) int Wert zurück. Das passt nicht zusammen.



  • oli 23 schrieb:

    nein ich wollte nur die Adresse von n in des Buffer kopieren und gleich 4 zeichen weil doch int 4 Byte hat....

    Ja, aber char hat nur 1 Byte, nicht 4.
    Wenn du schon Integer speicherst, warum machst du dann kein Integer Array?

    @groovemaster:
    Aber die Rechnung passte so schön mit seiner Ausgabe zusammen, dass ich gedacht habe ich hätte das falsch im Kopf gehabt 😉


Anmelden zum Antworten