Найти - Пользователи
Полная версия: Переобразование 16-ричной, 10-ной, 8-ной в двоичную систему счисления
Начало » Python для экспертов » Переобразование 16-ричной, 10-ной, 8-ной в двоичную систему счисления
1
balu
Есть ли в Python стандартная возможность осуществить сабж или надо писать самому?
Viper
Можно так:

print “%o”%25
print “%x”%25
j2a
>>> i = 25
>>> oct(i)
'031'
>>> hex(i)
'0x19'
Striver
Гы! Вопрос то про ДВОИЧНУЮ систему был, про oct и hex и так известно (интересно нафига кому-нибудь может понадобиться восьмеричная система?).
Запрос в Google “binary numbers python” приводит к http://code.google.com/p/gmpy/
ofigetitelno
В кукбуке питоновском есть примерчик:
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
balu
Striver
Гы! Вопрос то про ДВОИЧНУЮ систему был, про oct и hex и так известно (интересно нафига кому-нибудь может понадобиться восьмеричная система?).
Раздаю права ;)
balu
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


Всем спасибо.
balu
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
masai

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-тиричной системы. :)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB