Размер каждого символа в ASCII
(StreamWriter
) занимает 1
байта, будь то число или символ.
Точно так же каков будет размер каждого символа, целого числа в двоичном формате? (BinaryWriter
). Может кто-нибудь объяснить вкратце?
Размер каждого символа в ASCII
(StreamWriter
) занимает 1
байта, будь то число или символ.
Точно так же каков будет размер каждого символа, целого числа в двоичном формате? (BinaryWriter
). Может кто-нибудь объяснить вкратце?
Начнем с разницы между StreamWriter
и BinaryWriter
. StreamWriter
предназначен для записи текстового представления в поток. StreamWriter
преобразует все, что написано (с помощью метода Write*) в строку, затем преобразует с помощью кодировки в байты и записывает байты в базовый поток.
BinaryWriter
предназначен для записи необработанных "примитивных" типов данных в поток. Для числовых типов он принимает представление в памяти, выполняет некоторую работу по нормализации представления (например, для обработки различий в порядке следования байтов), а затем записывает байты в базовый поток. Обратите внимание, что он также имеет кодировку, предоставленную в конструкторе. Это используется только для преобразования char
и string
в байты. Кодировка по умолчанию — UTF8.
Размер каждого символа в ASCII (StreamWriter) занимает 1 байт, будь то число или символ.
Это утверждение несколько сбивает меня с толку. Позвольте мне уточнить. int
1 будет преобразовано в строку «1», которая кодируется в ASCII как 49, что действительно является одним байтом, но 100 будет преобразовано в строку «10000», которая кодируется в ASCII как 49 48 48 48 48, так что это 5 байтов. . При использовании BinaryWriter
оба займут 4 байта (размер int
).
Точно так же каков будет размер каждого символа, целого числа в двоичном формате? (Двоичный писатель). Может кто-нибудь объяснить вкратце?
Размер char
зависит от кодировки, используемой как для BinaryWriter
, так и для StreamWriter
. Размер числовых типов, таких как int
, long
, double
, является размером базовых типов, 4, 8 и 8 байтов соответственно. Объем записываемых данных документируется в каждой перегрузке записи файла BinaryWriter. Строки обрабатываются отдельно от char[]
в BinaryWriter, и перед записью закодированных байтов к их длине добавляется префикс.
sizeof(char) == 2
, поэтому длина одного символа 2 байта; однако размерStream
зависит от кодировки (Ascii, UTF-8 и т.д.) и самих символов:aaa
(3 английские буквыa
) может быть короче, чемааа
(3 русские буквыа
) - person Dmitry Bychenko   schedule 18.12.2015char
в C# — это UTF-16, это означает, что каждый символ занимает 2 байта. Интегральный тип зависит от его размера, то есть это может быть один байт (Byte
),Short
(16 бит),int
(32 бит),long
(64 бит). - person Yuval Itzchakov   schedule 18.12.2015BinaryWriter
, они используют его по плохо обдуманным причинам. Что вам нужно сделать здесь? Будет ли бинарный сериализатор лучшим выбором? (есть несколько на выбор) - person Marc Gravell   schedule 18.12.2015Write
— не совсем уверен, какая еще информация вам нужна — т.е. BinaryWriter.Write(Int32) — записывает четырехбайтовое целое число со знаком в текущий поток и сдвигает позицию потока на четыре байта.... - person Alexei Levenkov   schedule 18.12.2015