Ein 16bit unsigned short Wert oder ein char-Zeichen in Integer umwandeln



  • Hallo,
    ich lese über zwei Varianten eine Binärdatei ein. Einmal mit der get-Methode und ifstream in ein char Array

    …
    bindat.open(m_txt_binFile, ios::in | ios::binary);
    if (bindat)
    	{
    		i=0;
    		while (bindat.good())
    		{
    			if (i < 500000)
    			{
    				bindat.get(daten[i++]);
    			}
    …
    

    und einmal mit fread in ein unsigned short Array.

    …
    // open file read-only and binary
    if((hFile = fopen(szFile,"rb")) == NULL){
       	MessageBox("Quelldatei kann nicht geöffnet werden!", "Fehler", MB_OK);
    }
    else{
    	// read 16-bit values into array
          	fread(buffer, sizeof(short), FileSize+4, hFile);
    
    …
    

    Nun habe ich folgendes Problem:
    Ich möchte in einem der zwei Arrays (egal in welchem) drei Felder zusammenfügen und in einen Integer Wert umwandeln.

    So habe ich es z.B. versucht:

    char test[4];
    test[0] = daten[245];	//daten[245] = F9
    test[1] = daten[246];	//daten[246] = 8D
    test[2] = daten[247];	//daten[247] = A4
    test[3] = 0;
    
    int x = atoi(test);	//jetzt müßte 16354724(F98DA4 hex) herauskommen.
    

    Keine Ahnung was ich hier falsch mache. Hab jetzt schon so einen dicken Kopf, dass ich nicht weiterkomme.

    und so:

    unsigned short test = buffer[150];
    test += buffer[151];
    

    Mir ist klar das ich ein falsches Ergebnis bekomme wenn ich die Felder addiere, aber wie bekomme ich es richtig hin?

    Kann mir bitte jemand helfen bevor mein Kopf explodiert bzw. mein PC aus dem Fenster fliegt? 🙂

    Ach und wenn ich schon dabei bin:
    Wie kann ich ganz einfach überprüfen, dass ein Pfad existiert?
    z.B.: char pfad[30] = "C:\temp\test1\

    Ich Danke euch schon einmal im Voraus für eure Hilfe.

    Gruß Zizou



  • Du mußt die einzelnen Teilstücke auch mit Bit-Arithmetik zusammenschieben:

    x = test[0]<<16 | test[1]<<8 | test[0]; //char-Variante
    x = test[0]<<16 | test[1]; //short-Variante
    


  • Hallo,

    Ooooh Mann! da hätte ich auch selber drauf kommen können.
    Ist ja logisch.

    Danke

    Gruß Zizou


Anmelden zum Antworten