Greetings to the Python gurus,
I have a binary file and wish to see the "raw" content of it. So I open it in binary mode, and read one byte at a time to a variable, which will be of the string type. Now the problem is how to print the binary format of that charater to the standard output. It seems a common task but I just cannot find the appropriate method from the documentation. Thanks a lot.
FWIW, I work with serial data a lot, and I find the following list comprehension to be a handy output tool for binary data:
print " ".join(["%0.2X" % ord(c) for c in data])
The space between each byte helps keep things from degenerating into a meaningless mass of numbers, and using 2-digit hex instead of binary works towards the same purpose. (I actually currently use the hex() builtin, but the above just occurred to me, and it will give nicer formatting, and avoids the C-style "0x" prefixing each byte)
Here's an interesting twiddle, though (there's probably already something along these lines in the cookbook):
Py> def show_base(val, base, min_length = 1): ... chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" ... if base < 2: raise ValueError("2 is minimum meaningful base") ... if base > len(chars): raise ValueError("Not enough characters for base") ... new_val = [] ... while val: ... val, remainder = divmod(val, base) ... new_val.append(chars[remainder]) ... result = "".join(reversed(new_val)) ... return ("0" * (min_length - len(result))) + result ... Py> show_base(10, 2) '1010' Py> show_base(10, 2, 8) '00001010' Py> show_base(10, 16, 2) '0A' Py> show_base(254, 16, 2) 'FE' Py> show_base(0, 16) '0' Py> for base in range(2, 36): ... for testval in range(1000): ... assert testval == int(show_base(testval, base), base) ... Py>
Cheers, Nick.
-- Nick Coghlan | [EMAIL PROTECTED] | Brisbane, Australia --------------------------------------------------------------- http://boredomandlaziness.skystorm.net -- http://mail.python.org/mailman/listinfo/python-list