Сколько байтов получено с помощью dataReceived?

Я использую Twisted для получения данных из сокета. Мой класс протокола наследуется от Protocol.

Поскольку в Python 2.* нет типа byte, тип получаемых данных — str. Конечно, len (данные) дает мне длину строки, но как я могу узнать количество полученных байтов? Нет sizeof или чего-то эквивалентного, что позволяет мне узнать количество байтов? Или я должен учитывать, что независимо от платформы количество байтов будет 2 * len (данные)?

заранее спасибо


person jean    schedule 14.09.2012    source источник
comment
Почему вы предполагаете 2*len(data), а не 1*len(data)?   -  person ypercubeᵀᴹ    schedule 15.09.2012
comment
потому что я думал, что char кодируется двумя байтами. Если это не так, то это идеально для меня   -  person jean    schedule 15.09.2012
comment
Весь смысл байтов 2.x str/3.x в том, что это набор байтов. Количество байтов всегда равно len(data). В 2.x unicode/3.x str это набор символов; будь то 2 байта, 4, иногда-2-иногда-4 или что-то еще, не имеет значения, потому что в любом случае нет прямого доступа к байтам.   -  person abarnert    schedule 15.09.2012
comment
PS, в (более поздних версиях) 2.x есть тип bytes; это просто синоним str, но он существует и работает почти так же, как байты в 3.x.   -  person abarnert    schedule 15.09.2012


Ответы (2)


В Питоне 2,

  • str → последовательность байтов, которая иногда используется как текст ASCII
  • bytes → псевдоним для str (доступно в python 2.6 и более поздних версиях)
  • unicode → последовательность единиц кода юникода (UCS-2 или UCS-4, в зависимости от параметров времени компиляции, по умолчанию UCS-2)

В Питоне 3,

  • str → последовательность единиц кода Юникода (UCS-4)
  • bytes → последовательность байтов
  • unicode → такого больше нет, ты имеешь в виду str

Думайте о типе, переданном dataReceived, как о bytes. Это bytes в Python 2.x, будет bytes, когда Twisted будет портирован на Python 3.x.

Следовательно, длина полученного сегмента в байтах равна просто len(data).

person Glyph    schedule 14.09.2012

Длина строки — это длина в байтах.

person Hans Then    schedule 14.09.2012