unsigned char[] und string



  • Moin.
    nun versuche ich es seit tagen zu verstehen und zu lösen.. es klappt nicht:
    ich habe

    unsigned char buffer[255];
    string neuerWert = "irgendwas";     // 
    int start, laenge;
    //  code
    void schreibeRein ( neuerWert, start,laenge){
            // falls zu kurz
            while ( neuerWert.size() < laenge){
                    neuerWert += " ";
            }
            //falls zu lang
            if( neuerWert.size() > laenge){
                    neuerWert = neuerWert.substr(0,laenge);
            }
    
            // string in den Buffer schreiben 
            :D und genau hier komme ich nicht weiter  :D
    

    Wäre schön, wenn mir jemand erklären könnte , wie ich das machen kann.
    Ich habe schon mit substr und casts versucht, war nie das richtige dabei
    beim googlen habe ich nichts gefunden oder es übersehen.
    Herzlichen Dank Hanns



  • neuerWert.c_str()
    

    macht dir ein c-String draus und mit

    memcopy(...)
    

    (evtl. auch mit

    strcpy(...)
    

    kanst du das ganze in den buffer schieben.



  • HiFmeise,
    die beiden *copy beginnen aber am Anfang des buffers.
    Ich muss aber irgendwo in der Mitte anfangen.
    Ich raffe es dennoch nicht
    😕



  • Du kannst deinen buffer an jeder beliebigen Stelle in den *copy funtionen übergeben, z.B.

    memcpy(&buffer[3], ...)
    

    . Schau dir evtl. auch strncpy an.

    Wenn du den buffer allerdings später als string verwenden willst, pass auf, dass du das ganze mit '\0' abschließt.



  • JUHU,
    ich habs gefressen.
    Danke 🙂 🙂



  • int main(int args, char** argv)
    {
    	const int LENGTH = 10;
    	char buffer[LENGTH] = {'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', '\0'};
    
    	std::cout << "buffer: " << buffer << std::endl;
    
    	std::string s("ABC");
    	int start = 2;
    	int length = 5;
    
    	while (s.size() < length) s += " ";	
    	memcpy(&buffer[start-1], s.c_str(), length);
    
    	std::cout << "buffer: " << buffer << std::endl;
    }
    


  • FMeise schrieb:

    int main(int args, char** argv)
    {
    	const int LENGTH = 10;
    	char buffer[LENGTH] = {'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', '\0'};
    
    	std::cout << "buffer: " << buffer << std::endl;
    
    	std::string s("ABC");
    	int start = 2;
    
    	int length = 5;
    
    	while (s.size() < length) s += " ";	
    
    	memcpy(&buffer[start-1], s.c_str(), length);
    	
    	std::cout << "buffer: " << buffer << std::endl;
    }
    

    Ja danke, so hat es auch bei mir geklapptm nur dass ich start bei 0 beginnen lasse, und mir noch ne Prüfung eingebaut habe, ob der String zu lang ist.

    Nochmals vielen Dank, meine Zahnschmerzen sind vorbei.
    Hanns


Anmelden zum Antworten