Python: How do I convert from binary to base64 and back?

后端 未结 3 1176
礼貌的吻别
礼貌的吻别 2020-12-19 07:12

Lets say I have some binary value:

0b100

and want to convert it to base64

doing base64.b64decode(0b100) tells me that

相关标签:
3条回答
  • 2020-12-19 07:59

    Depending on how you represent the value 0b100

    >>> import struct
    >>> val = 0b100
    >>> print struct.pack('I', val).encode('base64')
    BAAAAA==
    

    This will turn your value into a 4-byte integer in native endianness, and encode that value into base64. You need to specify the width of your data as base64 is really made for representing binary data in printable characters.

    You can typically encode data as a string of bytes via struct's functions, and then encode into base64. Ensure you're using the same data layout and endianess when decoding.

    0 讨论(0)
  • 2020-12-19 08:08

    Binary literals are just normal python integers.

    >>> 0b100
    <<< 4
    
    >>> 4
    <<< 4
    

    Just convert to a string and base64 encode it (giving you a string that is the base64 representation of '4'). There is nothing wrong with this approach, it's lossless and simple.

    >>> s = str(0b100).encode('base64')
    
    >>> int(s.decode('base64'))
    <<< 4
    

    If you want, you can use bin to convert the int into a binary string:

    >>> bin(int(s.decode('base64')))
    <<< '0b100'
    
    0 讨论(0)
  • 2020-12-19 08:10

    How large is your binary value? If it can fit in a single byte, then you can use chr.

    >>> base64.b64encode(chr(255))
    '/w=='
    

    Otherwise I think you'll have to get the individual bytes out of it with some exponential math and arrange them in big-endian or little-endian, calling chr multiple times. (Edit: yan's answer with the struct module is easier :)

    Also, I should note that the binary integer syntax is just that, syntax. The interpreter sees it as just another integer.

    >>> (0b0).__class__
    <type 'int'>
    
    0 讨论(0)
提交回复
热议问题