Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2008
    Messaggi
    14

    [C win32]Legge, modifica file e scrive su altro

    Ciao a tutti,
    devo realizzare una dll che prende in IN un file .TXT
    contenente tipo:
    "var"\x65\x61\x6F...
    ed ad ogni occorrenza sequenziale dei caratteri "\x" tramite atoi() deve restituirmi il valore esadecimale dei due numeri successi.
    Il file in uscita dovrà contenere il file originale con le modifiche esadecimali.
    Io ho realizzato questo codice, che nn va...
    Non sono tanto esperta della programmazione Windows..chiedevo se qualcuno poteva darmi una mano..
    Thanks

    __declspec(dllexport) void Convert(HANDLE hFile, HANDLE hFiLE1)
    {

    DWORD dwbyteRead;
    DWORD dwbyteWrite;

    BYTE *dwSFP;
    char dueChar[2];
    char dueChar1[2];

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E dov'e' il codice?

    Quelle righe non fanno molto ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2008
    Messaggi
    14
    scusate...riscrivo

    Ciao a tutti,
    devo realizzare una dll che prende in IN un file .TXT
    contenente tipo:
    "var"\x65\x61\x6F...
    ed ad ogni occorrenza sequenziale dei caratteri "\x" tramite atoi() deve restituirmi il valore esadecimale dei due numeri

    successi.
    Il file in uscita dovrà contenere il file originale con le modifiche esadecimali.
    Io ho realizzato questo codice, che nn va...
    Non sono tanto esperta della programmazione Windows..chiedevo se qualcuno poteva darmi una mano..
    Thanks

    __declspec(dllexport) void Convert(HANDLE hFile, HANDLE hFiLE1)
    {

    DWORD dwbyteRead;
    DWORD dwbyteWrite;

    BYTE *dwSFP;
    char dueChar[2];
    char dueChar1[2];

    char occorrenza ="\x";
    int i;
    int x=0;
    dwSFP = (BYTE*) calloc(GetFileSize(hFile, NULL), sizeof(hFile));
    ReadFile(hFile, &dwSFP, GetFileSize(hFile, NULL), &dwbyteRead, NULL);
    FOR(i=0; i<sizeof(dwSFP)-1; i++)
    {
    dueChar1[0] = dueChar[i];
    dueChar1[1] = dueChar[i+1];
    if(strcmp(dueChar1,occorrenza)!=0) //se i caratteri letti sono diversi da "\x"mi scrive sul file
    {
    WriteFile(hFile1, dueChar1, sizeof(dueChar), &dwbyteWrite, NULL);
    }
    else //altrimenti prendo i due caratteri dopo ai due caratteri
    //controllati e prendo il valore esadecimale tramite atoi
    {
    dueChar1[0] = dueChar[i+2];
    dueChar1[1] = dueChar[i+3];
    x=atoi(dueChar1);
    WriteFile(hFile1, &x, sizeof(dueChar), &dwbyteWrite, NULL);

    }
    }
    free(dwSFP);
    }

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2008
    Messaggi
    14
    cmq rilassandomi un'attimo e pensandoci su..forse dovrei copiare i caratteri in questo modo:

    strcpy_s(dueChar1[0],1,dueChar[i]);
    strcpy_s(dueChar1[1],1,dueChar[i+1]);


    che ne pensate?

  5. #5
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Salta all'occhio questo:
    codice:
    FOR(i=0; i<sizeof(dwSFP)-1; i++)
    dwSFP è un puntatore e sizeof(dwSFP) restitusce sempre 4 o 8 byte a seconda se si tratta di una piattaforma a 32 bit o 64.
    Se vuoi controllare tutto il buffer devi usare:
    codice:
    FOR(i=0; i<dwbyteRead-1; i++)
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2008
    Messaggi
    14
    ...già..sn proprio sciocchina....
    ...riguardo gli array di caratteri..
    ho messo dimensione 2 byte ciascuno perchè penso che ad ogni iterazione del ciclo copi tramite strcpy_s 2 byte per fare il confronto tramite strcmp...

    ...che dite?

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2008
    Messaggi
    14
    ....non avete qualche idea????io continuo a pensarci e mi piacerebbe un'aiutino...
    mi serve capire e parlarne con qualcuno...

  8. #8
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Il tempo di provare, almeno.
    Veramente ne copi solo uno per volta.
    codice:
    strcpy_s(dueChar1[0],1,dueChar[i]);
    strcpy_s(dueChar1[1],1,dueChar[i+1]);
    il che equivale a:
    codice:
    dueChar1[0] = dueChar[i];
    dueChar1[1] = dueChar[i+1];
    Io farei una cosa simile a questa. Però non ho capito se il \x65 deve diventare 65 nel file output o serve una brutale conversione da int a char*
    codice:
     
    __declspec(dllexport) void Convert(HANDLE hFile, HANDLE hFiLE1)
    {
    	DWORD dwbyteRead;
    	DWORD dwbyteWrite;
    
    	BYTE *dwSFP;
    	char dueChar1[2];
    
    	const char* occorrenza = "\\x";
    	int i;
            int *dest;
    	int x=0;
    	int destPos=0;
    
    	int size = GetFileSize(hFile, NULL);
    	dwSFP = (BYTE*) calloc(size, sizeof(BYTE));
    	ReadFile(hFile, &dwSFP, size, &dwbyteRead, NULL);
    	dest = (int*) calloc(dwbyteRead,sizeof(int));
    
    	for (i=0; i<dwbyteRead-1; i+=2)
    	{
    		dueChar1[0] = dwSFP[i];
    		dueChar1[1] = dwSFP[i+1];
    		
    		if(strncmp(dueChar1,occorrenza,2) //se i caratteri letti sono diversi da "\x" mi scrive sul buffer temporaneo.
    		{
    			dest[destpos++] = atoi(dueChar1); 
    		}
    	}
    
    	WriteFile(hFile1, dest, destpos, &dwbyteWrite, NULL);
    
    	free(dwSFP);
    	free(dest);
    }
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.