2015-12-18 11 views
6

La dimensione di ogni carattere in ASCII (StreamWriter) prende 1 byte sia che si tratti di un numero o di un carattere.Dimensioni dei tipi durante la scrittura in BinaryWriter

Analogamente quale sarà la dimensione di ogni carattere, intero in binario? (BinaryWriter). Qualcuno può spiegare in breve? inizio

+0

'sizeof (char) == 2', quindi il carattere singolo è * 2 byte * lungo; tuttavia, la dimensione di 'Stream' dipende dalla codifica (Ascii, UTF-8 ecc.) e dai caratteri stessi:' aaa' (3 lettere inglesi 'a') può essere più breve di' ааа' (3 * Russo * lettere 'A ') –

+0

Un' char' in C# è UTF-16, questo significa che ogni carattere richiede 2 byte. Un tipo intergrale dipende dalla sua dimensione, il che significa che può essere un singolo byte ('Byte'), un' Short' (16 bit), 'int' (32 bit),' long' (64 bit). –

+1

Quasi (ma non del tutto) ogni volta che vedo qualcuno usare 'BinaryWriter', lo usano per ragioni scarsamente prese in considerazione. Che cosa hai bisogno di fare qui? Un serializzatore binario sarebbe una scelta migliore? (ce ne sono diversi tra cui scegliere) –

risposta

1

Let con differenza tra StreamWriter e BinaryWriter. StreamWriter è per la scrittura di una rappresentazione testuale in un flusso. StreamWriter converte tutto ciò che viene scritto (tramite metodo Write *) in una stringa, quindi converte tramite la codifica in byte e scrive i byte nel flusso sottostante.

BinaryWriter è per la scrittura di tipi di dati grezzi "primitivi" in un flusso. Per i tipi numerici prende la rappresentazione in memoria, alcuni funzionano fino a normalizzare la rappresentazione (ad esempio per gestire le differenze in endianess) e quindi scrivono i byte nel flusso sottostante. Si noti che ha anche una codifica fornita nel costruttore. Viene utilizzato solo per convertire char e string in byte. La codifica predefinita è UTF8.

La dimensione di ciascun carattere in ASCII (StreamWriter) richiede 1 byte sia esso un numero o un carattere.

Questa è una dichiarazione un po 'confusa per me. Permettimi di chiarire. Il int 1 verrà convertito nella stringa "1" che codifica in ASCII come 49 che è effettivamente un byte, ma 100 verrà convertito nella stringa "10000" che codifica in ASCII a 49 48 48 48 48, quindi questo è 5 byte . Se si utilizza BinaryWriter entrambi occuperebbero 4 byte (la dimensione di un int).

Analogamente, quale sarà la dimensione di ogni carattere, intero in binario? (BinaryWriter). Qualcuno può spiegare in breve?

La dimensione di un char dipende dalla codifica utilizzata sia per BinaryWriter e StreamWriter. La dimensione dei tipi numerici come int, long, double sono le dimensioni dei tipi sottostanti, 4, 8 e 8 byte rispettivamente. La quantità di dati scritti è documentata in ogni Write overload di BinaryWriter. Le stringhe vengono trattate distintamente da char[] in BinaryWriter e avranno la loro lunghezza prefissata prima che i byte codificati vengano scritti.

Problemi correlati