Odd-length string error with binascii.unhexlify

17.3k views Asked by At

I'm trying to convert back and forth an ASCII string to its binary representation as follows.

s=chr(0)*15 + chr(0x01)
bst = bin(int(binascii.hexlify(s), 16))
n = int(bst, 2)
binascii.unhexlify('%x' % n) 

However, I get the following error at the end which doesn't make much sense to me.

1 binascii.unhexlify('%x' % n)

TypeError: Odd-length string

What's the issue and how can I solve it ?

2

There are 2 answers

1
fredtantini On BEST ANSWER

Using the python console:

>>> help(binascii.unhexlify)

unhexlify(...)
    a2b_hex(hexstr) -> s; Binary data of hexadecimal representation.

    hexstr must contain an even number of hex digits (upper or lower case).
    This function is also available as "unhexlify()"

So the error is consistent. What you have to do is padding with '0' to have an even number:

>>> binascii.unhexlify('0%x' % n)
'\x01'
0
Jurijus Pacalovas On
                n = int(wer, 2)

                qqwslenf=len(wer)
                qqwslenf=(qqwslenf/8)*2
                qqwslenf=str(qqwslenf)
                qqwslenf="%0"+qqwslenf+"x"


                jlz=binascii.unhexlify(qqwslenf % n)
                #we convert from binary to ASCII exactly size of need by half bytes.