Nie*_*bæk 129 python binary formatting bitwise-operators
我正在尝试使用Python中的bin()函数将整数转换为二进制.但是,它总是删除我实际需要的前导零,这样结果总是8位:
例:
bin(1) -> 0b1
# What I would like:
bin(1) -> 0b00000001
Run Code Online (Sandbox Code Playgroud)
有办法做到这一点吗?
Mar*_*ers 181
使用format()功能:
>>> format(14, '#010b')
'0b00001110'
Run Code Online (Sandbox Code Playgroud)
该format()函数只是按照格式规范迷你语言格式化输入.在#使格式包括0b前缀,而010大小格式的输出,以适应在10个字符宽,与0填充; 0b前缀为2个字符,二进制数字为8个.
这是最紧凑和直接的选择.
如果要将结果放在一个更大的字符串中,请在占位符的冒号后面使用str.format()并放置该format()函数的第二个参数{:..}:
>>> value = 14
>>> f'The produced output, in binary, is: {value:#010b}'
'The produced output, in binary, is: 0b00001110'
>>> 'The produced output, in binary, is: {:#010b}'.format(value)
'The produced output, in binary, is: 0b00001110'
Run Code Online (Sandbox Code Playgroud)
如果您不想要format()前缀,只需删除format(...)并调整字段的长度:
>>> import timeit
>>> timeit.timeit("f_(v, '#010b')", "v = 14; f_ = format") # use a local for performance
0.40298633499332936
>>> timeit.timeit("f'{v:#010b}'", "v = 14")
0.2850222919951193
Run Code Online (Sandbox Code Playgroud)
bwb*_*ing 106
>>> '{:08b}'.format(1)
'00000001'
Run Code Online (Sandbox Code Playgroud)
请参阅:格式规范迷你语言
注意对于Python 2.6或更早版本,您不能在之前省略位置参数标识符:,因此请使用
>>> '{0:08b}'.format(1)
'00000001'
Run Code Online (Sandbox Code Playgroud)
rek*_*nyz 24
我在用
bin(1)[2:].zfill(8)
Run Code Online (Sandbox Code Playgroud)
将打印
'00000001'
Run Code Online (Sandbox Code Playgroud)
ruo*_*ola 10
使用 Python 时>= 3.6,您可以使用带有字符串格式的f 字符串:
>>> var = 23
>>> f"{var:#010b}"
'0b00010111'
Run Code Online (Sandbox Code Playgroud)
解释:
var要格式化的变量:此后的所有内容都是格式说明符#使用替代形式(添加0b前缀)0用零填充10将总长度填充为 10(这包括 的 2 个字符0b)b使用数字的二进制表示形式您可以使用字符串格式化迷你语言:
def binary(num, pre='0b', length=8, spacer=0):
return '{0}{{:{1}>{2}}}'.format(pre, spacer, length).format(bin(num)[2:])
Run Code Online (Sandbox Code Playgroud)
演示:
print binary(1)
Run Code Online (Sandbox Code Playgroud)
输出:
'0b00000001'
Run Code Online (Sandbox Code Playgroud)
编辑: 基于@Martijn Pieters的想法
def binary(num, length=8):
return format(num, '#0{}b'.format(length + 2))
Run Code Online (Sandbox Code Playgroud)
我喜欢用 python f 字符串格式化来处理一些更复杂的事情,比如在格式中使用参数:
>>> x = 5
>>> n = 8
>>> print(f"{x:0{n}b}")
00000101
Run Code Online (Sandbox Code Playgroud)
在这里,我使用以下格式打印变量x:我希望将其左侧填充为0具有 length = n,采用b(二进制)格式。有关更多信息,请参阅之前答案中的格式规范迷你语言。
| 归档时间: |
|
| 查看次数: |
134482 次 |
| 最近记录: |