Newsgroup: it.comp.lang.c
Titolo: Conversione da binario a file.txt

Ciao, sono un neofita della programmazione in C.
Ho dei files binari (16bit) .DEM che vorrei convertire in file .txt
C'è già del codice che lo fa o una funzione apposita?
Grazie
Mattia

 C'è già del codice che lo fa o una funzione apposita?
Che domanda surreale...
Mi ricorda vagamente la celebre scena del vigile nel film "Totò, Peppino e
la malafemmina" (
http://www.mikiweb.org/toto%20vigile.jpg
).
--
Cingar
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 la malafemmina" (
http://www.mikiweb.org/toto%20vigile.jpg
).
"Scusi, per andare dove vogliamo andare, da che parte dobbiamo andare?"
-- 
Quando noi ignoranti eravamo di piů, tutto era piů bello (A. Celentano).
  ___   _   ___ _  _______   _______ ___
|   \ /_\ | _ \ |/ / _ ) \ / /_   _| __|
| |) / _ \|   / ' <| _ \\ V /  | | | _|
|___/_/ \_\_|_\_|\_\___/ |_|   |_| |___|

 ha
scritto nel messaggio news:41c9...@x-privat.org...


 Come posso fare?
Passando il tutto per un convertitore base-64 ottieni un file di testo
a partire da un file binario: sono sicuro che non e' quello che cerchi,
ma con le informazioni che hai dato e' quanto di meglio si possa fare.
Quello che servirebbe sapere e' cosa contiene il file di partenza e
cosa deve contenere il file di arrivo. Sembra strano, ma non e' detto
che la conversione che vuoi fare si possa fare/abbia senso farla.
Ad es. se il file di partenza contiene dei punti come floating point
impacchettati in una certa meniera (che deve essere nota prima di
cominciare a scrivere il codice), ha senso convertirli in formato testo
per poterli importare in un altro programma.
Se il file di partenza contiene codice eseguibile, la conversione in
formato testo ha gia' molto meno senso...
HTH
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:7fe08fe80723e17cc11...@mygate.mailgate.org...


 Please....
uso:
    nomeProgramma fileDiInput > fileDiOutput
<CODE>
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
#include <errno.h>
int main(int argc, char* argv[])
{
   int fd = -1;
   int idx = 0;
   int nRead = 0;
   short inBuff[1024];
   if(NULL != argv[1])
   {
      fd = open(argv[1], O_BINARY| O_RDONLY);
      if(-1 < fd)
      {
         nRead = read(fd, inBuff, sizeof(inBuff));
         while(0 < nRead/sizeof(short))
         {
            idx = 0;
            while(idx < nRead)
            {
               printf("%+10d,", inBuff[idx]);
               idx++;
            }
            nRead = read(fd, inBuff, sizeof(inBuff));
         }
         close(fd);
      }
   }
   return 0;
}
</CODE>
Non c'e' nessun controllo degli errori e non e' stato testato in
maniera estensiva: compila e ha convertito un paio di file binari
secondo la tua specifica senza crashare.
Spero ti sia utile.


 Please....
Quello che non capisco, č come si fa a sapere quanti numeri ci sono in
ogni "row". Č un numero fisso?
Comunque, il codice per stampare un formato del genere č abbastanza
semplice, anche a volerlo far lungo:
#include <stdio.h>
int main (int argc, char ** argv)
{
   long i = -1;
   unsigned short n;
   FILE *fdem = NULL, *ftxt = stdout;
   if (argc < 2 || argc > 3)
   {
      fprintf(stderr, "Uso: %s DemFile [TxtFile]\n", argv[0]);
      return EXIT_FAILURE;
   }
   if ((fdem = fopen(argv[1], "rb")) == NULL)
   {
      fprintf(stderr, "%s: errore aprendo file <%s> (%d: %s).\n",
              argv[0], argv[1], errno, sterror(errno));
      return EXIT_FAILURE;
   }
   if (argc >= 3 && (ftxt = fopen(argv[2], "w")) == NULL)
   {
      fprintf(stderr, "%s: errore aprendo file <%s> (%d: %s).\n",
              argv[0], argv[2], errno, sterror(errno));
      fclose(fdem);
      return EXIT_FAILURE;
   }
   for (i = 0; fread(&n, sizeof(n), 1, fdem) == 1; i++)
   {
#ifdef _DEM_SWAP      
      unsigned short t = (n << 8) & 0xFF00;
      n = t | (n & 0xFF)
#endif
      fprintf(ftxt, "%ld\n", (long)(signed short)n);
   }
   if (ferror(fdem))
   {
      fprintf(stderr, "%s: errore leggendo <%s> (%d: %s).\n",
              argv[0], argv[1], errno, sterror(errno));
      fclose(fdem);
      if (ftxt != stdout)
         fclose(ftxt);
      return EXIT_FAILURE;
   }
   if (ftxt != stdout)
      fclose(ftxt);
   fclose(fdem);
   return EXIT_SUCCESS;
}
La macro _DEM_SWAP deve essere definita sulla linea di comando del
compilatore su processori con "endianness" (ordine dei byte negli int)
diversa da quella di questi file DEM. (NOTA: codice assolutamente non
testato, manco provato a compilare.)
--
Cingar
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


VI.2.4 DEM File (.DEM)
The DEM is provided as 16-bit signed integer data in a simple binary raster. 
There are no header or trailer bytes imbedded in the image. The data are stored 
in row major order .
Se il .dem di cui parli corrisponde a queste specifiche e se quello che vuoi 
fare e' ottenere un file con elencati tali interi codificati in ASCII, si 
tratta di scrivere una decina di righe di codice usando le librerie standard 
per l'input/output su file (<fstream>)
Se non hai idea di come fare, vediamo di buttare giu' qualche idea insieme... ok?
Spero di esserti stato d'aiuto,
Paolo
PS: Il cross-posting e' male, cross-posting senza follow-up e' malissimo! Ti 
invito a non ricorrere piu' a tali *mezzucci*
PPS: f-up impostato su free.it.comp.linguaggi.c++
-- 
Anche se detesto quello che dici,
difendero' fino alla morte il tuo diritto a dirlo.
   - Voltaire
/\/ / /-/ / /_   Copyleft (L) 1984, All Rights Reversed

 ha scritto nel messaggio
news:e710bed1cedd297401c...@mygate.mailgate.org...


 Mattia
Sono fuori sede e non ho VC++ sotto mano. Hai dei problemi con gli
header
precompilati, prova a fare un nuovo progetto assicurandoti che sia di
tipo win32 console.
Per le istruzioni passo passo devi aspettare qualche giorno :-)
Per adesso Buon Anno a te e a tutto il NG.


 ha scritto nel messaggio
news:b5f04a37b46b13b5632...@mygate.mailgate.org...


 poi come li salvo in un file di testo?
Vabbe' essere agli inizi... Usi fprintf(), che altro!


 ha scritto nel messaggio
news:crh5go$eo8$1...@news.newsland.it...


 ha scritto nel messaggio
BTW, sui newsgroup è uso (talvolta addirittura obbligo) scrivere DOPO il
testo a cui si risponde, non prima.



Perfetto, non essendo un programmatore sono riuscito. Ora però il dato -9999
è passato dal -3264 a -10024!  quindi qualcosina di imperfetto c'è...si, ma
cosa? non so dove mettere le mani
Mattia