Уведомления

Группа в Telegram: @pythonsu

#1 Июль 28, 2014 10:24:17

alexbadaloff
От: Иваново
Зарегистрирован: 2013-04-11
Сообщения: 198
Репутация: +  16  -
Профиль   Отправить e-mail  

Bytes копирвание [решено]

Смысл по сокету принять bytes, обновить часть и отослать ответом изменённую строку bytes.
И я не могу понять как мне из одной строки bytes скопировать часть из другой строки bytes:

>>> one=bytes([129,130,131])
>>> two=bytes([22,33])
>>> one[0]=two[0]
Traceback (most recent call last):
  File "<pyshell#24>", line 1, in <module>
    one[0]=two[0]
TypeError: 'bytes' object does not support item assignment
>>> 



————————–
Истина где-то рядом

Отредактировано alexbadaloff (Июль 28, 2014 12:53:45)

Офлайн

#2 Июль 28, 2014 10:57:40

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Bytes копирвание [решено]

>>> one=bytes([129,130,131])
>>> type(one)
<type 'str'>
>>> one[0]
'['
>>> one=bytearray([129,130,131])
>>> type(one)
<type 'bytearray'>
>>> one[0]
129
>>> one[0] = 36
>>> one
bytearray(b'$\x82\x83')
>>> one=bytes([129,130,131])
>>> one
bytearray(b'\x81\x82\x83')
>>> one=bytearray([129,130,131])
>>> two=bytearray([22,33])
>>> one[0]=two[0]
>>> one
bytearray(b'\x16\x82\x83')
>>> two
bytearray(b'\x16!')



————————————————
-*- Simple is better than complex -*-

Отредактировано terabayt (Июль 28, 2014 10:58:20)

Офлайн

#3 Июль 28, 2014 12:33:18

alexbadaloff
От: Иваново
Зарегистрирован: 2013-04-11
Сообщения: 198
Репутация: +  16  -
Профиль   Отправить e-mail  

Bytes копирвание [решено]

terabayt
>>> one=bytes([129,130,131])
>>> type(one)
<type 'str'>



>>> one=bytes([129,130,131])
>>> type(one)
<class 'bytes'>
>>>

terabayt
one=bytearray([129,130,131])
>>> type(one)
<type 'bytearray'>
>>> one
bytearray(b'\x81\x82\x83')
Тут будут не только необходимые для отправки байты, но и слово bytearray, которое мне не нужно.

Мне нужно, принять:
>>> one=bytes([129,130,131])

Поправить 2 байта, и отправить уже:
one=bytes([129,77,79])

А вот как поправить?



————————–
Истина где-то рядом

Отредактировано alexbadaloff (Июль 28, 2014 12:49:04)

Офлайн

#4 Июль 28, 2014 12:52:36

alexbadaloff
От: Иваново
Зарегистрирован: 2013-04-11
Сообщения: 198
Репутация: +  16  -
Профиль   Отправить e-mail  

Bytes копирвание [решено]

Видимо единственный вариант, но зато рабочий, обычная конкатенация в другую переменную:

>>> one=bytes([129,130,131])
>>> one
b'\x81\x82\x83'
>>> two=one[:1]+bytes([132,133])
>>> two
b'\x81\x84\x85'



————————–
Истина где-то рядом

Отредактировано alexbadaloff (Июль 28, 2014 12:53:10)

Офлайн

#5 Июль 28, 2014 23:29:44

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10014
Репутация: +  857  -
Профиль   Отправить e-mail  

Bytes копирвание [решено]

alexbadaloff
Тут будут не только необходимые для отправки байты, но и слово bytearray

Не будет там слова bytearray, это пишет интерпретатор для пользователя, чтобы тот видел, что это не bytes.

bytearray() - это тот же bytes(), только с дополнительными методами. Поэтому его везде можно использовать так же, как и bytes().

>>> b = bytes([1, 2, 3])
>>> ba = bytearray(b)
>>> ba[1] *= 3
>>> b = bytes(ba)
>>> b
b'\x01\x06\x03'
>>>



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version