Некоторые символы занимают больше байтов, чем другие?

Я не очень разбираюсь в вещах более низкого уровня, таких как количество байтов в символе. Я пытался выяснить, равен ли один символ одному байту, но безуспешно.

Мне нужно установить разделитель, используемый для сокетных соединений между сервером и клиентами. Этот разделитель должен быть как можно меньше (в байтах), чтобы минимизировать пропускную способность.

Текущий разделитель - "#". Будет ли использование другого разделителя уменьшать мою пропускную способность?


person Tom    schedule 26.06.2009    source источник
comment
Вы можете использовать точку . поскольку он использует наименьшее количество пикселей, кроме пробела.   -  person TheTXI    schedule 26.06.2009
comment
@TheTXI: Тогда почему бы вместо этого не использовать пробел? Зачем вообще тратить пиксели?   -  person Pesto    schedule 26.06.2009
comment
Количество используемых пикселей отличается от пропускной способности. Он обеспокоен двоичными единицами и нулями, отправляемыми по сети. (насколько я понимаю)   -  person samoz    schedule 26.06.2009
comment
samoz: Я думаю, мы должны сократить наши накладные расходы на как можно большем количестве арен.   -  person TheTXI    schedule 26.06.2009
comment
@samoz: игнорировать TheTXI. Он один из тех энтузиастов окружающей среды, которые постоянно твердят о том, что у них мало пикселей и что они нейтральны по отношению к пикселям. С ними нет рассуждений.   -  person Pesto    schedule 26.06.2009
comment
Песто: Ты просто еще один луддит с головой в песке, который не осознает, что мы разрушаем интернет, засоряя его ненужными пикселями.   -  person TheTXI    schedule 26.06.2009
comment
@TheTXI: нет никаких доказательств того, что загрязнение пикселей приводит к потеплению в Интернете. Многие ученые даже не думают, что интернет-потепление реально. Я не собираюсь получать данные об окружающей среде от тех же чудаков, которые хотят использовать полностью натуральные конопляные пиксели.   -  person Pesto    schedule 26.06.2009
comment
Песто: Вот видите, опять. Вы более чем счастливы использовать обработанные пиксели на основе нефти, для производства которых не только требуется гораздо больше ценных ресурсов, но и пахнет горящим пластиком, а не полностью натуральным чудо-растением? Производство конопляных пикселей обходится в несколько раз дешевле и является полностью устойчивым ресурсом. Ан нет, курение этих пикселей не даст вам кайфа, только головную боль.   -  person TheTXI    schedule 26.06.2009
comment
@TheTXI @Pesto Вы, ребята, шутите или серьезно? Я не могу уловить сарказма...   -  person samoz    schedule 26.06.2009
comment
@samoz: Ты меня очень огорчаешь. Я надеюсь, что это ваш первый раз в Интернете.   -  person GEOCHET    schedule 26.06.2009
comment
@TheTXI: Во-первых, мне нравится запах горящего пластика. Это напоминает мне о детских поездках в Нью-Джерси. Во-вторых, я на самом деле тоже не считаю, что нам следует придерживаться нефтяных пикселей. Я большой сторонник ядерных пикселей. Знаете ли вы, что пиксели образуются из электронов, которые являются побочным продуктом ядерного деления? Я мечтаю о том дне, когда у всех будет ядерный реактор под столом, чтобы они могли использовать расширенный символ ASCII 219 сколько угодно, не опасаясь, что вы, хиппи, оближете их красной краской.   -  person Pesto    schedule 26.06.2009
comment
Песто: Вы знаете, что также является побочным продуктом производства ядерных пикселей? Отходы ядерных пикселей? Вы знаете, что мы делаем с этими отходами? Мы храним его в больших бочках, которые протекают и выливают все эти отходы в наши битовые потоки и наши файловые потоки. Вы когда-нибудь видели мутировавших жуков, поражающих наши когда-то нетронутые места обитания? Вы действительно бездушный программист.   -  person TheTXI    schedule 26.06.2009
comment
Rich B: Что ж, тогда вам лучше начать больше думать о своей среде разработки, или все это загрязнение пикселями приведет к возможному вымиранию пони.   -  person TheTXI    schedule 26.06.2009
comment
@TheTXI: :( Ты чудовище. Верни его!   -  person GEOCHET    schedule 26.06.2009
comment
@TheTXI: Очевидно, что есть потребность в более качественных ведрах для бит, но вы бы выбросили ребенка вместе с водой из ванны. Давайте применим немного критического мышления к вашему раствору конопли. Вся эта конопля потребует огромного количества удобрений. Хотя в Интернете полно всякой ерунды (например, ваших безумных разглагольствований), важно отметить, что для этой чуши требуются пиксели. Это бесконечный цикл: чем больше пикселей, тем больше ерунды, для чего нужно еще больше пикселей и т. д. И это даже не касается количества необходимых сельскохозяйственных угодий. Что мы будем делать, прокачивать ВП и превращать его в конопляную ферму?   -  person Pesto    schedule 26.06.2009
comment
Rich B: Правда ранит, и я не верну ее. Вы должны открыть глаза на ущерб, который все это избыточное использование пикселей наносит миру разработки программного обеспечения. Это действительно крестовый поход, и победить его можно только с помощью подавляющего числа темнокожих людей, не разделяющих ваши убеждения.   -  person TheTXI    schedule 26.06.2009
comment
Песто: WV уже является национальным лидером по производству марихуаны, поэтому очевидно, что наша среда хорошо подходит для промышленного производства конопли.   -  person TheTXI    schedule 26.06.2009


Ответы (4)


Это зависит от того, какую кодировку символов вы используете для перевода между символами и байтами (что совсем не одно и то же):

  • В ASCII или ISO 8859 каждый символ представлен одним байтом.
  • В UTF-32 каждый символ представлен 4 байтами.
  • В UTF-8 каждый символ занимает от 1 до 4 байт.
  • В ISO 2022 все гораздо сложнее

Символы US-ASCII (одним из которых является #) будут занимать всего 1 байт в UTF-8, которая является наиболее популярной кодировкой, допускающей многобайтовые символы.

person Michael Borgwardt    schedule 26.06.2009
comment
Символы US-ASCII занимают 1 байт практически в любой кодировке, кроме UTF-16 и UTF-32. - person dan04; 21.08.2010

Это зависит от кодировки. В однобайтовых наборах символов, таких как ANSI и различные наборы символов ISO8859, это один байт на символ. Некоторые кодировки, такие как UTF8, имеют переменную ширину, где количество байтов для кодирования символа зависит от кодируемого глифа.

person ConcernedOfTunbridgeWells    schedule 26.06.2009

Конечно, это зависит. Если вы находитесь в чистой среде ASCII, то да, каждый символ занимает 1 байт, но если вы находитесь в среде Unicode (например, во всех Windows), то размер символов может варьироваться от 1 до 4 байтов.

Если вы выберете символ из набора ASCII, то да, ваш разделитель будет как можно меньше.

person Scott Weinstein    schedule 26.06.2009

Нет, все символы имеют размер 1 байт, если вы не используете Unicode или расширенные символы (например, для диакритических знаков и других символов).

Символ имеет длину 1 байт или 8 бит, что дает 256 возможных комбинаций для формирования символов. Символы размером 1 байт называются символами ASCII. Они используют только 7 бит (хотя доступно 8, но вы не можете использовать этот 8-й бит) для формирования стандартного алфавита и различных символов, использовавшихся, когда телетайпы и пишущие машинки были еще распространены.

Вы можете найти таблицу ASCII и узнать, какие числа соответствуют каким символам здесь.

person samoz    schedule 26.06.2009
comment
Например, уравнение символов и байтов, 1-байтовые символы называются символами ASCII, вы не можете использовать этот 8-й бит. Я предлагаю вам очень внимательно прочитать joelonsoftware.com/articles/Unicode.html. - person Michael Borgwardt; 26.06.2009
comment
Я только что прочитал статью, которую вы мне прислали, и до сих пор не понимаю, в чем я вопиюще ошибаюсь. Он по-прежнему может отправлять символы ASCII (даже если они UTF-8) в 1 байте. И, подумав об этом, комментарий не может использовать 8-битный был неправильным, просто потребовалась дополнительная обработка, чтобы удалить 8-битный сигнал, который он отправлял. - person samoz; 26.06.2009
comment
Самое главное, что неправильно, это то, что символы не являются байтами, и также нет смысла говорить, что символы являются UTF-8 или Unicode или широкими. Символы также не имеют длины. Вам нужна КОДИРОВАНИЕ для перевода символов в байты, и только тогда вы можете говорить о длине и о том, какие символы поддерживает кодировка. И наверняка есть кодировки, в которых символы, поддерживаемые ASCII, занимают более 1 байта. - person Michael Borgwardt; 26.06.2009
comment
Я говорю о том, когда вы вводите: char c, вы получаете 1 байт, выделенный вам. ОП спросил, может ли он использовать что-то меньшее, на что ответ отрицательный, потому что байт — это наименьшая вещь, которую вы можете выделить. По характеру я говорю о типе char, а не о фактической букве. Под более крупными символами я подразумеваю тип wchar. - person samoz; 26.06.2009
comment
ОП не сказал, какой язык он использует; C-специфические ответы, которые даже не распознаются как таковые, не то, что ему нужно. Кстати, ваш ответ неверен и для C; стандарт C действительно требует, чтобы 1 char == 1 байт (и о, сколько страданий причинил этот идиотизм), но он НЕ требует 8-битных байтов, и на самом деле существуют архитектуры, в которых байты имеют больше или меньше битов. - person Michael Borgwardt; 26.06.2009