Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta
Google ha appena rinnovato la sua celebre serie A con il Pixel 10a, lo smartphone della serie più conveniente se consideriamo il rapporto tra costo e prestazioni. Con il chip Tensor G4, un design raffinato soprattutto sul retro e l'integrazione profonda di Gemini, il colosso di Mountain View promette un'esperienza premium a un prezzo accessibile. E il retro non ha nessuno scalino
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026
Al MWC Qualcomm annuncia una coalizione industriale per lanciare il 6G entro il 2029 e introduce agenti IA per la gestione autonoma della RAN. Ericsson, presente sul palco, conferma la direzione: le reti del futuro saranno IA-native fin dalla progettazione
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso
CHUWI CoreBook Air è un ultraleggero da 1 kg con Ryzen 5 6600H, display 14" 16:10 e 16 GB LPDDR5. Offre buona portabilità, autonomia discreta e costruzione in alluminio, ma storage PCIe 3.0 e RAM saldata limitano l'espandibilità. A 549 euro sfida brand più noti nella stessa fascia di mercato.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-09-2011, 21:03   #1
Freaxxx
Senior Member
 
L'Avatar di Freaxxx
 
Iscritto dal: Dec 2006
Messaggi: 3808
[C] lettura in binario di un file

ho creato questo semplice programma e cambiando la modalità di lettura del file da r a rb non vedo variazioni: cosa significa? cosa significa che fopen mi apre in binario il file? e cosa fa fopen nell'altro caso con la sola r?

Codice:
#include <stdio.h>

readFile(char*);

int main(){
    readFile("Untitled1.c");
}

readFile(char myString[]){
    FILE* myF;
    myF=fopen(myString,"rb");
    if(myF==NULL){
        printf("\nPROBLEMI DURANTE L'ACCESSO AL FILE %s\n",myString);
    } else {
        char myC;
        while(fscanf(myF,"%c",&myC)!=EOF){
            printf("%c",myC);
        }
    }
}
Freaxxx è offline   Rispondi citando il messaggio o parte di esso
Old 22-09-2011, 21:15   #2
ingframin
Senior Member
 
L'Avatar di ingframin
 
Iscritto dal: Apr 2010
Città: Leuven
Messaggi: 667
Per un file di testo non c'è nessuna differenza perché 1 carattere = 1 byte.
Prova a leggere un file di testo unicode on file contenente interi. Se non lo leggi con rb, non sei in grado di ricostruire correttamente quello che leggi.
Se però qualche anima pia più esperta di me ti sa dare una spiegazione migliore ben venga
__________________
L'elettronica digitale non esiste, è solo elettrotecnica con interruttori piccoli!
ingframin è offline   Rispondi citando il messaggio o parte di esso
Old 23-09-2011, 16:55   #3
british
Member
 
L'Avatar di british
 
Iscritto dal: Sep 2008
Città: Milano
Messaggi: 126
Secondo lo standard (C89 mi pare) esistono due tipi di file: testo e binari. Non è però richiesto che il sistema operativo distingua tra i due.

Un file di testo è caratterizzato dall'essere diviso in linee, separate da un qualche tipo di sequenza, che dipende dal sistema operativo: LF(0x0a) su Unix, CR(0x0d) sui vecchi MacOS, CRLF su DOS,Windows,OS/2.

E qui c'è il trucco:
su Unix, per esempio, non fa differenza aprire un file con o senza il "b" (vedi anche man 3 fopen): per ogni "a capo logico" nel file c'è un byte (LF) e quello ti becchi.
Su Win, per ogni a "capo" logico nel file ci sono due byte: CR e LF. se apri un file come "b" li vedi entrambi, se lo apri come testo la sequenza ti viene tradotta al volo in un solo LF.

In scrittura avviene il contrario: se sei in modalità testo il tuo LF viene scritto senza modifiche su Unix e invece trasformato in un CRLF su Win, se sei in modalità binaria nessuna modifica accade e ogni byte viene scritto raw.

vedi anche http://en.wikipedia.org/wiki/Newline

ciao!

british
british è offline   Rispondi citando il messaggio o parte di esso
Old 23-09-2011, 20:56   #4
Freaxxx
Senior Member
 
L'Avatar di Freaxxx
 
Iscritto dal: Dec 2006
Messaggi: 3808
Quote:
Originariamente inviato da british Guarda i messaggi
Secondo lo standard (C89 mi pare) esistono due tipi di file: testo e binari. Non è però richiesto che il sistema operativo distingua tra i due.

Un file di testo è caratterizzato dall'essere diviso in linee, separate da un qualche tipo di sequenza, che dipende dal sistema operativo: LF(0x0a) su Unix, CR(0x0d) sui vecchi MacOS, CRLF su DOS,Windows,OS/2.

E qui c'è il trucco:
su Unix, per esempio, non fa differenza aprire un file con o senza il "b" (vedi anche man 3 fopen): per ogni "a capo logico" nel file c'è un byte (LF) e quello ti becchi.
Su Win, per ogni a "capo" logico nel file ci sono due byte: CR e LF. se apri un file come "b" li vedi entrambi, se lo apri come testo la sequenza ti viene tradotta al volo in un solo LF.

In scrittura avviene il contrario: se sei in modalità testo il tuo LF viene scritto senza modifiche su Unix e invece trasformato in un CRLF su Win, se sei in modalità binaria nessuna modifica accade e ogni byte viene scritto raw.

vedi anche http://en.wikipedia.org/wiki/Newline

ciao!

british
ti ringrazio per la precisazione puntuale sui file di testo ma vorrei capire in generale a che serve e che differenza ci sia tra le due modalità, anche aprendo altri tipi di file.
Freaxxx è offline   Rispondi citando il messaggio o parte di esso
Old 26-09-2011, 14:46   #5
british
Member
 
L'Avatar di british
 
Iscritto dal: Sep 2008
Città: Milano
Messaggi: 126
Quote:
Originariamente inviato da Freaxxx Guarda i messaggi
ti ringrazio per la precisazione puntuale sui file di testo ma vorrei capire in generale a che serve e che differenza ci sia tra le due modalità, anche aprendo altri tipi di file.
La differenza è nella traduzione (sia in lettura che in scrittura) o meno delle sequenze di fine linea.

Questa traduzione ti serve se stai leggendo un file a contenuto testuale "cantami o diva/l'ira del pelide achille..." in cui ti interessa sapere dove inizino e finiscano le linee ma poi come il separatore di fine linea sia memorizzato effettivamente, beh, non è tuo problema.

Viceversa se stai leggendo un file a contenuto "binario" (nel senso "non testuale"), magari un'immagine, tu vuoi che due byte 0x0D e 0x0A che sono fisicamente presenti (e contigui) nel file e magari in questo esempio ti rappresentano il valore di un certo pixel ti vengano forniti effettivamente come un byte 0x0D e un byte 0x0A, e non tradotti in un solo 0X0A da un zelante sistema che pensa si tratti di una fine linea in mezzo all'Iliade.

ciao!

british
british è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta Recensione Google Pixel 10a, si migliora poco ma...
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026 6G, da rete che trasporta dati a rete intelligen...
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso CHUWI CoreBook Air alla prova: design premium, b...
Roborock Saros 20: il robot preciso e molto sottile Roborock Saros 20: il robot preciso e molto sott...
ASUS ROG Kithara: quando HIFIMAN incontra il gaming con driver planari da 100mm ASUS ROG Kithara: quando HIFIMAN incontra il gam...
Rocket Lab ha posticipato il lancio del ...
Dalla missione Artemis IV il razzo spazi...
Una delle sonde europee di ESA Proba-3 h...
Un modder fa girare Linux su PS5: GTA V ...
MacBook Neo: nessuna sorpresa nei primi ...
La serie POCO X8 Pro è pronta al ...
Smartphone: 2026 difficile per il mercat...
Star Wars: Knights of the Old Republic R...
Huang, NVIDIA: OpenClaw ha realizzato in...
Annunciano il recupero di 4,8 milioni di...
Oggi degli ottimi auricolari Sony con ca...
Muffa in casa? Questo deumidificatore da...
Sonos Era 100: il punto d'ingresso per u...
"Non stiamo sostituendo nessuno con...
Tutti i robot in offerta ora: prezzi bas...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 01:07.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v