HEX- Datei einlesen



  • CM_HT schrieb:

    wenn CString einen operator LPTCHAR() hat, dann könnte man wie vorgehen...
    ich muss nochmal nachlesen was Du konkret meinst...

    Dann kann man den String (bzw. Teilstring) direkt dort angeben, wo ein konstantes Char-Array benötigt wird (z.B. als ersten Parameter für sscanf()).

    (LPTCHAR ist ein WinAPI typedef für char* bzw. wchar_t*)



  • ja:

    void CPIC_ProgrammerDlg::Zeilen_conv(CString str)
    {
    
    	int i, length;
    	CString zw;
    	length = str.GetLength();
    
    	for(i=0;i<length;i++)
    	{
    
    		zw= str.Mid(i,2);
    		scanf(zw,"%c",databuf[i]);
    		i++;
    	}
    
    }
    

    Es geht um folgendes:
    Ich habe ein *.hex -File das ich zeilenweise einlesen will.
    die zeilen können so aussehen:

    :020000040000FA

    Dabei lese ich diese Zeile ein und mit lasse das ":" verschinden

    read = file.ReadString(datastr);
    datastr = datastr.Mid(1);
    

    das übrige darastr wird der oben aufgeführten Funktion übergeben.

    da jeweils 2 ziffern eine hex- zahl darstellen soll diese mit .Mid
    zerlegt werden und in einen Buffer geschrieben werden, damit diese als
    Zahl weiterverarbeitet werden können.



  • versuch's mal mit

    for(i=1;i<length;i+=2)
    {
      zw= str.Mid(i,2);
      scanf(zw,"%c",databuf[i]);
    }
    

    Startwert 1 - das erste Zeichen ist ja der Doppelpunkt, den du vermutlich nicht mitlesen willst.
    Schrittweite 2 - überspringt jedes zweite Zeichen der Hex-Sequenz.



  • hm müsste in der schleife i nicht um 2 erhöht werden, wenn du immer 2 Zeichen liest?



  • ja sollte es,
    ist auch ein fehler, aber darum geht es erstmal nicht.
    ich habe gerade strcpy () versucht aber hier sagt er mir,
    dass die Konvertierung von CString in Char nicht geht



  • wozu brauchst du denn strcpy?



  • to CStoll

    for(i=1;i<length;i+=2) 
    { 
      zw= str.Mid(i,2); 
      scanf(zw,"%c",databuf[i]); 
    }
    

    Er gibt mir zwar kein kompiler Fehler aus, aber der databuf bleibt leer.



  • Ist dir klar, dass scanf von der Konsole einliest? Du meinst nicht sscanf?



  • *args* So genau habe ich auch nicht hingeguckt. Ich dachte, den Teil hättest du schon "unter Kontrolle".

    sscanf(zw,"%x",&(databuf[i]));
    /*
      1. 2*s im Funktionsnamen
      2. %x für Hex-Darstellung
      3. Adresse des Ziels
    */
    


  • Perfekt!!!
    vielen dank nochmal!!

    hier der code wie er läuft:

    int i, length;
    	CString zw;
    	length = str.GetLength();
    
    	for(i=1;i<length;i+=2) 
    	{ 
    	zw= str.Mid(i,2); 
    	sscanf(zw,"%x",&databuf[i]); 
    	}
    

    Good job!!! 🙂 🙂


Anmelden zum Antworten