V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
aheadlead
V2EX  ›  Python

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

  •  
  •   aheadlead · 2014-12-11 22:10:58 +08:00 · 2318 次点击
    这是一个创建于 3636 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现有字符串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一定有优雅的方法,故求助于各 位,谢谢 。(尽量不用第三方库...)
    5 条回复    2014-12-12 22:40:22 +08:00
    11
        1
    11  
       2014-12-11 22:18:45 +08:00   ❤️ 1
    >>> map(lambda x: x[2:], map(bin, map(ord, s)))
    ['1100001', '1100010', '1100011', '1100100']
    mengzhuo
        2
    mengzhuo  
       2014-12-11 22:19:34 +08:00   ❤️ 1
    struct.pack("4s", "abcd")
    大小端自己调吧……
    iptux
        3
    iptux  
       2014-12-11 23:01:23 +08:00   ❤️ 1
    ```
    >>> [ 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
        4
    aheadlead  
    OP
       2014-12-12 00:36:46 +08:00 via iPhone
    @iptux 感谢...在赶课程设计...查老一会儿没查到只好提问了 请原谅Orz
    ruoyu0088
        5
    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))
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4056 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:20 · PVG 18:20 · LAX 02:20 · JFK 05:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.