Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23
  1. #1
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,301

    [C] Problema lettura file con carattere ESC.

    Ciao ragazzi. Ho un piccolo problemino nella lettura di un file binario. Questo file contiene il carattere di ESCAPE (ASCII 26) e questo mi provoca una "interruzione" nella lettura dei byte successivi. Vi posto il codice ed il dump del file nel punto in cui crea problemi. Il file è molto semplice:
    codice:
    #include <stdio.h>
    int main(int a, char **b) {
       int f;
       int j=1;
       f = open(b[1], 0);
       printf(b[1]);
       while (j!=EOF) {
          read(f, &j, 1);
          printf("%c", j);
       }
       close(f);
       return 0;
    }
    Questo è il dump del file che sto tentando di leggere:
    codice:
    00 | 43 69 61 6f 20 61 20 74 75 74 74 69 00 1a 43 69 | Ciao a tutti..Ci
    10 | 61 6f 21 00 00 00 00 00 00 00 00 00 00 00 00 00 | ao!.............
    Il carattere evidenziato provoca il problema: la read() si blocca lì e non prosegue oltre. Il risultato è che a video mi viene restituito il contenuto del file fino alla prima frase ("Ciao a tutti") poi vengono visualizzate una sfilza di frecce a destra (corrispondenti al carattere di ESCAPE, ASCII 26). Come posso "superare" questo carattere e dire alla read di procedere fino alla fine del file?

    Grazie a tutti.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  2. #2
    a me sembra che ESC sia in ASCII il numero 27. Prova, non so se posso esserti stato di aiuto... CIAO
    Hanno rapito Berlusconi e chiedono un risarcimento di 10 milioni di euro, altrimenti gli danno fuoco. Partecipa anche tu... abbiamo già raccolto 500 litri di benzina...

    Chi vuole intendere INTENDA, gli altri IN ROULOTTE

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,301
    Sì... effettivamente risulta anche a me che il carattere ESC abbia carattere 27... (sono un po' arrugginito, stasera... ). Rimane il fatto che quel carattere mi provoca l'errore e non so come superarlo.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    si ma in esadecimale 1a è uguale a 26, prova a sostituirlo con 1b cioè 27
    Hanno rapito Berlusconi e chiedono un risarcimento di 10 milioni di euro, altrimenti gli danno fuoco. Partecipa anche tu... abbiamo già raccolto 500 litri di benzina...

    Chi vuole intendere INTENDA, gli altri IN ROULOTTE

  5. #5
    oppure se vuoi proprio saltare il 27 (errore mio, ho sbagliato a leggere la domanda) provalo a sostituire con 00 o con 90 (NOP). Ciao.
    Fammi sapere se era questa la domanda o l'altra
    Hanno rapito Berlusconi e chiedono un risarcimento di 10 milioni di euro, altrimenti gli danno fuoco. Partecipa anche tu... abbiamo già raccolto 500 litri di benzina...

    Chi vuole intendere INTENDA, gli altri IN ROULOTTE

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,301
    Forse non mi sono spiegato bene: io il file non lo devo e non lo posso toccare. Lo voglio semplicemente leggere byte per byte. Quindi, avendo il file di cui ho riportato il dump sopra, vorrei che il mio programma mi stampasse in output ciascun carattere del file fino alla fine del file (compreso il carattere 1a), ma che non si fermasse (o meglio, che non ciclasse inutilmente) sul carattere 1a.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,301
    Up!
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,301
    Nessuno ha mai riscontrato questo problema?
    Nessun suggerimento su come superare questo ostacolo? Una funzione C meno problematica della read()?
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    e' normale che se tu provi a stampare caratteri non stampabili la console in output ti da' errore e si incasina con i caratteri..
    i caratteri minori di 32 non vanno MAI stampati infatti non sono caratteri stampabili..
    stesso errore ti darebbe una stampante..

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,301
    Questo non è del tutto vero... caratteri come il BackSpace (ASCII 8) o il TAB (ASCII 9), Invio (ASCII 13, in combinazione con l'ASCII 10) si stampano benissimo. Comunque a me non interessa stampare il carattere, ma il relativo codice ASCII. Anzi, in realtà non mi interessa proprio di stampare niente, voglio solamente leggere TUTTO il file, mentre la read si ferma al carattere 0x1A...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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 © 2024 vBulletin Solutions, Inc. All rights reserved.