如何以二进制位的模式迭代一个字符串

2014-12-11 22:10:58 +08:00
 aheadlead
现有字符串s = 'abcd'

这是字符abcd的ascii码的二进制表示
a 01100001
b 01100010
c 01100011
d 01100100

我想要这样迭代
0 -> 1 -> 1 -> 0 -> 0 -> 0 -> 0 -> 1 ->
0 -> 1 -> 1 -> 0 -> 0 -> 0 -> 1 -> 0 ->
0 -> 1 -> 1 -> 0 -> 0 -> 0 -> 1 -> 1 ->
0 -> 1 -> 1 -> 0 -> 0 -> 1 -> 0 -> 0 -> (END)

我已经尝试搜索,实在找不到答案。
想必python一定有优雅的方法,故求助于各 位,谢谢 。(尽量不用第三方库...)
2239 次点击
所在节点    Python
5 条回复
11
2014-12-11 22:18:45 +08:00
>>> map(lambda x: x[2:], map(bin, map(ord, s)))
['1100001', '1100010', '1100011', '1100100']
mengzhuo
2014-12-11 22:19:34 +08:00
struct.pack("4s", "abcd")
大小端自己调吧……
iptux
2014-12-11 23:01:23 +08:00
```
>>> [ b for b in ''.join(['{0:08b}'.format(ord(i)) for i in 'abcd'])]
['0', '1', '1', '0', '0', '0', '0', '1', '0', '1', '1', '0', '0', '0', '1', '0', '0', '1', '1', '0', '0', '0', '1', '1', '0', '1', '1', '0', '0', '1', '0', '0']
>>>
```

'%b' % str 不支持,bin() 不能控制输出长度,只能用 format 了
(LZ 又是你 _ (:3」∠)_
aheadlead
2014-12-12 00:36:46 +08:00
@iptux 感谢...在赶课程设计...查老一会儿没查到只好提问了 请原谅Orz
ruoyu0088
2014-12-12 22:40:22 +08:00
Python3:

s = b"abcd"
'{0:0{fill}b}'.format(int.from_bytes(s, "big"), fill=8*len(s))

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/153253

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX