Qual è il significato dei seguenti caratteri di controllo:
Ritorno del trasporto
Avanzamento riga
Feed modulo
Qual è il significato dei seguenti caratteri di controllo:
Ritorno del trasporto
Avanzamento riga
Feed modulo
Risposte:
Ritorno a capo significa tornare all'inizio della riga corrente senza avanzare verso il basso. Il nome deriva dal carrello di una stampante, poiché i monitor erano rari quando il nome veniva coniato. Questo è comunemente sfuggito a \r
, abbreviato CR , e ha valore ASCII 13
o 0x0D
.
Linefeed significa avanzare verso il basso alla riga successiva; tuttavia, è stato riproposto e rinominato. Utilizzato come "newline", termina le linee (comunemente confuse con le linee di separazione ). Questo è comunemente sfuggito a \n
, abbreviato LF o NL, e ha valore ASCII 10
o 0x0A
. CRLF (ma non CRNL) viene utilizzato per la coppia \r\n
.
Il feed del modulo significa avanzare verso il basso fino alla "pagina" successiva. Era comunemente usato come separatore di pagine, ma ora è anche usato come separatore di sezioni. (Non è comunemente usato nel codice sorgente per dividere funzioni o gruppi di funzioni logicamente indipendenti.) Gli editor di testo possono usare questo carattere quando si "inserisce un'interruzione di pagina". Questo è comunemente sfuggito a \f
, abbreviato FF e ha valore ASCII 12
o 0x0C
.
Come personaggi di controllo, possono essere interpretati in vari modi.
La differenza più comune (e probabilmente l'unica degna di cui preoccuparsi) è che le linee finiscono con CRLF su Windows, NL su Mi piace Unix e CR su Mac più vecchi (la situazione è cambiata con OS X per essere come Unix). Nota il passaggio di significato da LF a NL, per lo stesso identico carattere, dà le differenze tra Windows e Unix. (Windows è, ovviamente, più recente di Unix, quindi non ha adottato questo spostamento semantico. Non conosco la storia dei Mac che usano CR.) Molti editor di testi possono leggere file in uno di questi tre formati e convertirli tra di loro , ma non tutte le utility possono farlo.
Il feed del modulo è un po 'più interessante (anche se meno comunemente usato direttamente) e, con la solita definizione di separatore di pagina, può venire solo tra le righe (ad esempio dopo la sequenza di nuova riga di NL, CRLF o CR) o all'inizio o fine del file.
\x0c
?
\r
è il ritorno a capo e sposta il cursore indietro come se lo farò-
printf("stackoverflow\rnine")
ninekoverflow
significa che ha spostato il cursore all'inizio di "stackoverflow" e sovrascrive i quattro caratteri iniziali poiché "nove" è lungo quattro caratteri.
\n
è un nuovo carattere di linea che cambia la linea e porta il cursore all'inizio di una nuova linea come-
printf("stackoverflow\nnine")
stackoverflow
nine
\f
è un feed di form, il suo uso è diventato obsoleto ma è usato per dare un rientro simile
printf("stackoverflow\fnine")
stackoverflow
nine
se scriverò come-
printf("stackoverflow\fnine\fgreat")
stackoverflow
nine
great
printf
utility di coreutils. O anche usando echo -en
quale è un built-in bash.
\f
è in realtà \v
: una scheda verticale, a condizione che entrambi abbiano lo stesso aspetto nella console.
printf("123\f456\f789");
mostra /> <bold> 123456789 </bold> sulla console.
Dai un'occhiata a Wikipedia :
I sistemi basati su ASCII o un set di caratteri compatibili utilizzano LF (avanzamento riga, '\ n', 0x0A, 10 in decimale) o CR (ritorno a capo, '\ r', 0x0D, 13 in decimale) singolarmente o CR seguito da LF (CR + LF, 0x0D 0x0A). Questi caratteri si basano sui comandi della stampante: l'alimentazione della riga indicava che una riga di carta doveva essere espulsa dalla stampante e un ritorno a capo indicava che il carrello della stampante doveva tornare all'inizio della riga corrente.
\f
viene utilizzato per l'interruzione di pagina. Non è possibile vedere alcun effetto nella console. Ma quando usi questa costante di carattere nel tuo file, puoi vedere la differenza.
Un altro esempio è che se è possibile reindirizzare l'output su un file, non è necessario scrivere un file o utilizzare la gestione dei file.
Ad esempio:
Scrivi questo codice in c ++
void main()
{
clrscr();
cout<<"helloooooo" ;
cout<<"\f";
cout<<"hiiiii" ;
}
e quando lo compili genera un exe (per es. abc.exe
)
quindi puoi reindirizzare il tuo output su un file usando questo:
abc > xyz.doc
quindi apri il file xyz.doc
per vedere l'interruzione di pagina effettiva tra ciao e hiiii ....
Oltre alle informazioni di cui sopra, esiste ancora una storia interessante di LF (\ n) e CR (\ r). [Autore originale: 阮一峰 Fonte: http://www.ruanyifeng.com/blog/2006/04/post_213.html] Prima che uscisse il computer, esisteva un tipo di teleprinter chiamato Teletype Model 33. Può stampare 10 caratteri ciascuno secondo. Ma c'è un problema con questo, dopo aver finito di stampare ogni riga, ci vorranno 0,2 secondi per passare alla riga successiva, che è tempo di stampare 2 caratteri. Se durante questi 0,2 secondi viene trasferito un nuovo personaggio, questo nuovo personaggio andrà perso.
Quindi gli scienziati hanno trovato un modo per risolvere questo problema, aggiungono due caratteri finali dopo ogni riga, uno è "Ritorno a capo", che è dire alla stampante di portare la testina di stampa a sinistra .; l'altro è "Avanzamento riga", indica alla stampante di spostare la carta in alto di 1 riga.
Più tardi, il computer è diventato popolare, questi due concetti sono utilizzati sui computer. A quel tempo, il dispositivo di archiviazione era molto costoso, quindi alcuni scienziati hanno detto che era costoso aggiungere due caratteri alla fine di ogni riga, uno è sufficiente, quindi ci sono alcuni argomenti su quale usare.
In UNIX / Mac e Linux, "\ n" viene inserito alla fine di ogni riga, in Windows, "\ r \ n" viene inserito alla fine di ogni riga. La conseguenza di questo uso è che i file in UNIX / Mac verranno visualizzati in una riga se aperti in Windows. Mentre il file in Windows avrà un ^ M alla fine di ogni riga se aperto in UNIX o Mac.
WRITE.EXE
(aka Wordpad) possono visualizzarli bene.
Sui vecchi terminali della stampante per carta, passare alla riga successiva comportava due azioni: spostare la testina di stampa all'inizio dell'intervallo di scansione orizzontale (ritorno del carrello) e far avanzare il rotolo di carta su cui stampare (avanzamento riga).
Dato che non usiamo più terminali per stampanti di carta, quelle azioni non sono più veramente rilevanti, ma i personaggi usati per segnalarli si sono bloccati in varie incarnazioni.
Prendi in considerazione una stampante a impatto IBM 1403. CR ha spostato la testina di stampa all'inizio della riga, ma NON ha fatto avanzare la carta. Ciò ha consentito la "sovrastampa", posizionando più righe di output su una riga. Cose come la sottolineatura sono state realizzate in questo modo, così come la stampa BOLD. LF ha avanzato la carta di una riga. Se non ci fosse CR, la riga successiva verrebbe stampata a passi sfalsati perché LF non ha spostato la testina di stampa. FF ha fatto avanzare il foglio alla pagina successiva. In genere ha anche spostato la testina di stampa all'inizio della prima riga nella nuova pagina, ma potrebbe essere necessario CR per questo. A dire il vero, la maggior parte dei programmatori ha codificato CRFF anziché CRLF alla fine dell'ultima riga di una pagina perché un CR aggiuntivo creato da FF non avrebbe importanza.
In breve :
Carriage_return ( \r
o 0xD
): per prendere il controllo all'inizio di stessa riga .
Line_Feed ( \n
o 0xA
): per assumere il controllo all'inizio di riga successiva .
form_feed ( \f
o 0xC
): per assumere il controllo all'inizio della pagina successiva .
Come supplemento,
1, ritorno a capo : è una terminologia della stampante che significa cambiare la posizione di stampa all'inizio della riga corrente . Nel mondo dei computer, nella maggior parte dei casi significa tornare all'inizio della riga corrente, ma raramente rappresenta una nuova riga.
2, avanzamento riga : è una terminologia della stampante che significa avanzare la carta di una riga. Quindi ritorno a capo e avanzamento riga vengono utilizzati insieme per iniziare a stampare all'inizio di una nuova riga. Nel mondo dei computer, ha generalmente lo stesso significato di newline.
3, Feed modulo : è una terminologia della stampante, mi piace la spiegazione in questo thread .
Se stavi programmando per una stampante in stile anni '80, espellerebbe il foglio e inizierebbe una nuova pagina. Sei praticamente sicuro di non averne mai bisogno.
È quasi obsoleto e puoi fare riferimento alla sequenza di escape \ f - form feed - che cos'è esattamente? per una spiegazione dettagliata.
Nota, possiamo usare CR o LF o CRLF per rappresentare la nuova linea in alcune piattaforme, ma la nuova linea non può essere sostenuta da loro in alcune altre piattaforme. Fare riferimento alla wiki Newline per i dettagli.
LF: sistemi Multics, Unix e Unix (Linux, OS X, FreeBSD, AIX, Xenix, ecc.), BeOS, Amiga, RISC OS e altri
CR: macchine Commodore a 8 bit, Acorn BBC, ZX Spectrum, TRS-80, famiglia Apple II, Oberon, il classico Mac OS fino alla versione 9, MIT Lisp Machine e OS-9
RS: implementazione pre-POSIX QNX
0x9B: macchine Atari a 8 bit che utilizzano la variante ATASCII di ASCII (155 in decimale)
CR + LF: Microsoft Windows, DOS (MS-DOS, PC DOS, ecc.), DEC TOPS-10, RT-11, CP / M, MP / M, Atari TOS, OS / 2, Symbian OS, Palm OS, CPC di Amstrad e la maggior parte dei primi sistemi operativi non Unix e non IBM
LF + CR: output di testo con spool della BBC Acorn e RISC OS.
Il ritorno a capo e l'alimentazione di linea sono anche riferimenti alle macchine da scrivere, in quanto con una piccola spinta sulla maniglia sul lato sinistro del carrello (il punto in cui va la carta), la carta ruoterebbe di una piccola quantità attorno al cilindro, facendo avanzare il documentare una riga. Se hai finito di digitare una riga e desideri continuare con la successiva, hai spinto più forte, sia facendo avanzare una riga che facendo scorrere il carrello completamente verso destra, quindi riprendendo a digitare nuovamente da sinistra a destra mentre il carrello viaggiava con ogni sequenza di tasti . Inutile dire che il ritorno a capo automatico era l'impostazione predefinita per tutte le elaborazioni di testi dell'era. P: D
Questi sono caratteri non stampabili, relativi al concetto di "nuova linea". \ n è linefeed. è il ritorno a capo. Su piattaforme diverse hanno significati diversi, relativi a una nuova linea valida. In Windows, una nuova riga è \ r \ n. In Linux, \ n. In mac, \ r.
In pratica, li metti in qualsiasi stringa e ciò avrà effetto sulla stampa della stringa.