关于python:将二进制格式化的字符串(带前导零)转换为整数然后再返回

Converting a binary formatted string (with leading zeros) to an integer and back again

我已将4个字符atcg转换为二进制格式,即

1
2
3
4
00 replacing A
11 replacing T
10 replacing C
01 replacing G

所以一个字符串

1
AGAGAGAGTGATAGA

转换后会像

1
001000100010001011100011001000

一旦我得到这个值,我就把这个二进制转换成它对应的整数,即

1
143177928.

问题是,当我想再次回到二进制时,它给了我

1
0b1000100010001011100011001000

这不是原始字符串的正确表示,因为它省略了1后面最左边的所有零。

所以我写了一个实现二进制转换的方法,我知道二进制字符串应该有多长。所以最后,我只是从返回的二进制文件中删除0b,并在最左边附加0s,即

1
#zeros = length of original binary - length of returned binary (0b removed)

有没有更好的方法来做这种转换??

我正在用python编写这个代码。


您可以在MSB后面附加一个标志位来保护所有前导零。

步骤1:转换

在末尾添加一个"标志"位并转换位字符串。

1
2
3
4
5
6
In [6]: converted_str = '001000100010001011100011001000'

In [9]: num = int('1' + converted_str, 2)

In [10]: num
Out[10]: 1216919752

第二步:再转换

使用format方法将数字转换回位字符串,同时去掉第一个"标志"位。

1
2
3
4
In [12]: reconverted_str = format(num, 'b')[1:]

In [13]: reconverted_str
Out[13]: '001000100010001011100011001000'


使用'{0:0{1}b}'.format(num, num_digits)

这将添加前导0,直到数字为num_digits。"b"指定num应转换为二进制。