Konwertuj na binarne i zachowaj wiodące zera w Pythonie
Próbuję przekonwertować liczbę całkowitą na binarną za pomocą funkcji bin () w Pythonie. Jednak zawsze usuwa wiodące zera, których faktycznie potrzebuję, takie, że wynik jest zawsze 8-bitowy:
Przykład:
bin(1) -> 0b1
# What I would like:
bin(1) -> 0b00000001
Jest na to jakiś sposób? 8 answers
Użyj format()
funkcja :
>>> format(14, '#010b')
'0b00001110'
Funkcja format()
formatuje dane wejściowe zgodnie ze specyfikacją formatu MINI language . Format #
sprawia, że format zawiera prefiks 0b
, A rozmiar 010
formatuje wyjście, aby zmieściło się w szerokości 10 znaków, z wypełnieniem 0
; 2 znaki dla prefiksu 0b
, Pozostałe 8 dla cyfr binarnych.
Jest to najbardziej kompaktowa i bezpośrednia opcja.
Jeśli stawiasz wynik w większym string, use str.format()
i umieść drugi argument funkcji format()
po dwukropku symbolu zastępczego {:..}
:
>>> 'The produced output, in binary, is: {:#010b}'.format(14)
'The produced output, in binary, is: 0b00001110'
Jeśli nie chcesz prefiksu 0b
, po prostu upuść #
i dostosuj długość pola:
>>> format(14, '08b')
'00001110'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-11 15:04:10
>>> '{:08b}'.format(1)
'00000001'
Patrz: Specyfikacja Formatu Mini-Język
Uwaga w Pythonie 2.6 lub starszym nie można pominąć identyfikatora argumentu pozycyjnego przed :
, więc użyj
>>> '{0:08b}'.format(1)
'00000001'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-01 11:48:02
Używam
bin(1)[2:].zfill(8)
Wydrukuje
'00000001'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-10 22:58:00
Możesz użyć mini języka formatowania łańcuchów:
def binary(num, pre='0b', length=8, spacer=0):
return '{0}{{:{1}>{2}}}'.format(pre, spacer, length).format(bin(num)[2:])
Demo:
print binary(1)
Wyjście:
'0b00000001'
EDIT: na podstawie pomysłu @Martijn Pieters
def binary(num, length=8):
return format(num, '#0{}b'.format(length + 2))
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-04 20:03:25
Czasami po prostu chcesz prosty jeden liner:
binary = ''.join(['{0:08b}'.format(ord(x)) for x in input])
Python 3
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-02 01:45:15
Możesz użyć czegoś takiego
("{:0%db}"%length).format(num)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-31 16:41:58
module Adder(
input upperBit, lowerBit, c_in,
output s, c_out)
write gate1, gate2, gate3
xor (gate1, upperBit, lowerBit)
xor (s, gate1, c_in)
and (upperBit, lowerBit)
and (gate1, c_in)
or (c_out, gate1, gate2)
endmodule
module ful_adder8(
input [7:0) a, b
input c_in
output [7:0) s,
output c_out)
write [7:0] carry
full_adder fa0(
a(a[o])
b(b[0])
c_in(c_in)
s(s[0])
c_out(carry[0]))
full_adder fa0(
a(a[o])
b(b[0])
c_in(c_in)
s(s[0])
c_out(carry[0]))
full_adder fa0(
a(a[o])
b(b[0])
c_in(c_in)
s(s[0])
c_out(carry[0]))
full_adder fa0(
a(a[o])
b(b[0])
c_in(c_in)
s(s[0])
c_out(carry[0]))
full_adder fa0(
a(a[o])
b(b[0])
c_in(c_in)
s(s[0])
c_out(carry[0]))
full_adder fa0(
a(a[o])
b(b[0])
c_in(c_in)
s(s[0])
c_out(carry[0]))
full_adder fa0(
a(a[o])
b(b[0])
c_in(c_in)
s(s[0])
c_out(carry[0]))
full_adder fa0(
a(a[o])
b(b[0])
c_in(c_in)
s(s[0])
c_out(carry[0]))
endmodule
test
def split (n):
return (n&0x1,n&0x2,n&0x4,n&0x8,n&0x10,n&0x20,n&0x40,n&0x80)
def glue (b0,b1,b2,b3,b4,b5,b6,b7,c):
t = 0
if b0:
t += 1
if b1:
t += 2
if b2:
t += 4
if b3:
t += 8
if b4:
t += 16
if b5:
t += 32
if b6:
t += 64
if b7:
t += 128
if c:
t += 256
return t
def myadd (a,b):
(a0,a1,a2,a3,a4,a5,a6,a7) = split(a)
(b0,b1,b2,b3,b4,b5,b6,b7) = split(b)
(s0,s1,s2,s3,s4,s5,s6,s7,c) = addEightBits(a0,a1,a2,a3,a4,a5,a6,a7,b0,b1,b2,b3,b4,b5,b6,b7,false)
return glue (s0,s1,s2,s3,s4,s5,s6,s7,c)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-27 11:07:08
Możesz użyć zfill:
print str(1).zfill(2)
print str(10).zfill(2)
print str(100).zfill(2)
Druki:
01
10
100
Podoba mi się to rozwiązanie, ponieważ pomaga nie tylko przy wypisywaniu liczby, ale gdy trzeba ją przypisać do zmiennej... np. - x = str (datetime.Data.dzisiaj ().miesiąc).zfill (2) zwróci x jako '02' za miesiąc luty.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-20 14:27:10