Уведомления

Jabber-конференция сообщества: pythonua@conference.jabber.ru

#1 Март 27, 2007 11:06:03

balu
От:
Зарегистрирован: 2006-05-24
Сообщения: 521
Репутация: +  0  -
Профиль   Отправить e-mail  

Переобразование 16-ричной, 10-ной, 8-ной в двоичную систему счисления

Есть ли в Python стандартная возможность осуществить сабж или надо писать самому?



Офлайн

#2 Март 27, 2007 11:16:57

Viper
От:
Зарегистрирован: 2006-11-08
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

Переобразование 16-ричной, 10-ной, 8-ной в двоичную систему счисления

Можно так:

print “%o”%25
print “%x”%25



Офлайн

#3 Март 27, 2007 11:23:37

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Переобразование 16-ричной, 10-ной, 8-ной в двоичную систему счисления

>>> i = 25
>>> oct(i)
'031'
>>> hex(i)
'0x19'



Офлайн

#4 Март 27, 2007 12:17:20

Striver
От:
Зарегистрирован: 2006-10-26
Сообщения: 116
Репутация: +  0  -
Профиль   Отправить e-mail  

Переобразование 16-ричной, 10-ной, 8-ной в двоичную систему счисления

Гы! Вопрос то про ДВОИЧНУЮ систему был, про oct и hex и так известно (интересно нафига кому-нибудь может понадобиться восьмеричная система?).
Запрос в Google “binary numbers python” приводит к http://code.google.com/p/gmpy/



Офлайн

#5 Март 27, 2007 12:38:41

ofigetitelno
От:
Зарегистрирован: 2006-08-01
Сообщения: 136
Репутация: +  0  -
Профиль   Отправить e-mail  

Переобразование 16-ричной, 10-ной, 8-ной в двоичную систему счисления

В кукбуке питоновском есть примерчик:

import string
def format(number, radix, digits=string.digits+string.ascii_lowercase):
""" format the given integer `number' in the given `radix' using the given
`digits' (default: digits and lowercase ascii letters) """
if not 2 <= radix <= len(digits):
raise ValueError, "radix must be in 2..%r, not %r" % (len(digits), radix)
# build result as a list of "digit"s in natural order (least-significant digit
# leftmost), at the end flip it around and join it up into a single string
result = [ ]
addon = result.append # extract bound-method once
# compute 'sign' (empty for number>=0) and ensure number >= 0 thereafter
sign = ''
if number < 0:
number = -number
sign = '-'
elif number == 0:
sign = '0'
_divmod = divmod # access to locals is faster
while number:
# like: rdigit = number % radix; number //= radix
number, rdigit = _divmod(number, radix)
# append appropriate string for the digit we just found
addon(digits[rdigit])
# append sign (if any), flip things around, and join up into a string
addon(sign)
result.reverse( )
return ''.join(result)
В десятичную, конструктором инта:
int('FF', 16)
print format(int('AB', 16), 2)
:)
Можно ещё и здесь посмотреть:
http://pleac.sourceforge.net/pleac_python/numbers.html



Отредактировано (Март 27, 2007 13:04:30)

Офлайн

#6 Март 27, 2007 13:32:19

balu
От:
Зарегистрирован: 2006-05-24
Сообщения: 521
Репутация: +  0  -
Профиль   Отправить e-mail  

Переобразование 16-ричной, 10-ной, 8-ной в двоичную систему счисления

Striver
Гы! Вопрос то про ДВОИЧНУЮ систему был, про oct и hex и так известно (интересно нафига кому-нибудь может понадобиться восьмеричная система?).
Раздаю права ;)



Офлайн

#7 Март 27, 2007 13:38:35

balu
От:
Зарегистрирован: 2006-05-24
Сообщения: 521
Репутация: +  0  -
Профиль   Отправить e-mail  

Переобразование 16-ричной, 10-ной, 8-ной в двоичную систему счисления

ofigetitelno
В десятичную, конструктором инта:
Да, с этим разобрался самостоятельно. Вопрос решился написанием собственных функций. Вот они:
def DigitToBin(value, numdigits=8, base=2):
“”“Convert integer to binary string.”“”
val = value
digits =
for i in range(numdigits):
val, digits = divmod(val, base)
s = ‘'
for digit in digits:
s = `digit`+s
return s

def OctToBin(value):
“”“Convert octal value to binary string.”“”
value = `value`
result = ’'
for digit in value:
result = result + DigitToBin(int(digit), 3)
return result


>>> print OctToBin(11)
001001
>>> print DigitToBin(11)
00001011


Всем спасибо.



Офлайн

#8 Март 27, 2007 13:55:56

balu
От:
Зарегистрирован: 2006-05-24
Сообщения: 521
Репутация: +  0  -
Профиль   Отправить e-mail  

Переобразование 16-ричной, 10-ной, 8-ной в двоичную систему счисления

balu
Вопрос решился написанием собственных функций. Вот они:
Функцию DigitToBin, естественно, можно написать проще, но тогда не будет работать OctToBin, может кому пригодиться…
def bin(i, numdigits=8):
“”“Convert integer to binary string.”“”
s = '';q = i
digits =
while (1):
q, r = divmod(q, 2)
s = `r` + s
if q == 0: break
return s

>>>print bin(11)
1011



Офлайн

#9 Март 28, 2007 01:16:21

masai
От:
Зарегистрирован: 2007-02-14
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Переобразование 16-ричной, 10-ной, 8-ной в двоичную систему счисления


Oct2Bin = {“0”:“000”,
“1”:“001”,
“2”:“010”,
“3”:“011”,
“4”:“100”,
“5”:“101”,
“6”:“110”,
“7”:“111”}

OctNumber = “172”

print “”.join(map(lambda x:Oct2Bin, list(OctNumber)))

Выводит на экран 001111010.

Аналогично для 16-тиричной системы. :)



Отредактировано (Март 28, 2007 01:32:53)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version