Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python Byte doesn't print binary

Tags:

python

byte

When I print a program such as this in Python:

x = b'francis'

The output is b'francis'. If bytes is in 0's and 1's why is it not printing it out?

like image 357
Francis Avatar asked Sep 18 '25 11:09

Francis


2 Answers

You seem to be fundamentally confused, in a very common way. The data itself is a distinct concept from its representation, i.e. what you see when you attempt to print it out or otherwise display it. There may be multiple ways to represent the same data. This is just like how if I write 23 (in decimal) or 0x17 (hexadecimal) or 0o27 (octal) or 0b10111 (binary) or twenty-three (English), I am talking about the same number.

At some lower level below Python, everything is bytes, and each byte consists of bits; but it is not correct to say that the bytes "are in" 0s and 1s - just like how it is not correct to say that the number twenty-three "is in" decimal digits (or hexadecimal, octal or binary ones, or in English text characters).

The symbols 0 and 1 are just pictures that we draw on a screen to represent the state of those bits - if we choose to represent them individually. Sometimes, we choose larger groupings, and assign different symbols to various combinations of states. For example, we may interpret multiple bits as a single integer value in binary; or (using Unicode) we might further interpret that number as a "code point" (most of these are text characters; some are control characters, or portions of text characters).

A Python bytes object is a wrapper for a "raw" sequence of bytes. When you display it, Python uses a representation where each byte (grouping of 8 bits) corresponds to one or more symbols: bytes whose corresponding integer value is between thirty-two and one hundred twenty-six (inclusive) are (for historical reasons) represented using individual text characters (following the so-called ASCII encoding), while others are represented with a four-character "escape sequence" beginning with \x and followed by the hexadecimal representation of the number.

like image 143
Karl Knechtel Avatar answered Sep 20 '25 02:09

Karl Knechtel


From python docs:

bytes and bytearray objects are sequences of integers (between 0 and 255), representing the ASCII value of single bytes.

So they are sequence of integers which represents ASCII values.

For conversion you can use:

import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
like image 45
Abhishek Keshri Avatar answered Sep 20 '25 02:09

Abhishek Keshri