Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 5, 2011 07:32:26

atomAltera
От:
Зарегистрирован: 2011-07-27
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

int to byte

Всем привет :)

Работаю с bytes, map-ю их. Вопрос в том, как сделать так, что-бы в результате арифметических операций, полученное число было-бы в диапазоне ?

Примеры:
230 + 90 = 64
5 - 7 = 254
255 + 1 = 0

в других языках есть функция byte(), а в Python?



Офлайн

#2 Авг. 5, 2011 07:45:35

boltayka
От:
Зарегистрирован: 2009-10-07
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

int to byte

230 + 90 [b]% 256[/b] = 64
5 - 7 [b]% 256[/b] = 254
255 + 1 [b]% 256[/b] = 0
можно ещё
 def byte(x):
return x % 256

Отредактировано (Авг. 5, 2011 07:47:57)

Офлайн

#3 Авг. 5, 2011 08:15:47

atomAltera
От:
Зарегистрирован: 2011-07-27
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

int to byte

Ок, спасибо



Офлайн

#4 Авг. 5, 2011 08:29:55

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

int to byte

еще вариант - numpy.array(,dtype='b') - это лучше если будете работать с массивами байтов



Офлайн

#5 Авг. 7, 2011 13:27:29

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

int to byte

Для получения младшего байта надо использовать побитовое AND c маской 0xff:

>>> 230+90 & 0xff
>>> 64
>>> 5-7 & 0xff
>>> 254
>>> 255+1 & 255
>>> 0



Отредактировано (Авг. 7, 2011 13:29:37)

Офлайн

#6 Авг. 8, 2011 17:10:26

atomAltera
От:
Зарегистрирован: 2011-07-27
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

int to byte

Isem
Для получения младшего байта надо использовать побитовое AND c маской 0xff:
>>> 230+90 & 0xff
>>> 64
>>> 5-7 & 0xff
>>> 254
>>> 255+1 & 255
>>> 0
наверное это самый лучший вариант. Даже по определению

а вот почему -4 % 256 в пайтоне 252 а на калькуляторе -4 понять не могу. % - это же деление по модулю?



Офлайн

#7 Авг. 9, 2011 03:45:45

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

int to byte

atomAltera
а вот почему -4 % 256 в пайтоне 252 а на калькуляторе -4 понять не могу. % - это же деление по модулю?
Все дело в представлении числа на выходе. Питон дает беззнаковое число, а калькулятор - знаковое. Другими словами -4 и 252 - это одно и то же если и то и другое представить в виде 8-ми бит: 11111100, только его по разному можно интерпретировать.
Хотя математически будет правильно так, как в калькуляторе.



Отредактировано (Авг. 9, 2011 03:56:11)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version