PYTHON

Python Bytes: Syntax, Usage, and Examples

The bytes type in Python represents a sequence of immutable byte values ranging from 0 to 255. This type is essential when you're working with binary data, such as reading or writing files in binary mode, processing network packets, or handling low-level protocols.

Understanding how Python bytes work, how to convert between strings and bytes, and how to manipulate byte arrays helps you handle many real-world applications—from encoding APIs to image processing and cryptography.


What Are Python Bytes?

Python bytes are sequences of raw 8-bit values. You use them when dealing with non-text data or when you want to encode text in a specific binary format, such as UTF-8 or ASCII.

In Python 3, text is stored as str (Unicode) and binary data as bytes; this separation between data types helps prevent encoding bugs when mixing unicode and text encodings.

print(type(b))  # <class 'bytes'>

A bytes object is defined by prefixing a string literal with a b. You can also use the bytes() constructor to create a bytes object from a string or an iterable of integers.

The b prefix indicates a byte string, while str stores unicode characters.


Creating Bytes in Python

You can create bytes objects using several approaches:

1. From a String

b = bytes("hello", encoding="utf-8")

2. From a List of Integers

b = bytes([104, 101, 108, 108, 111])

3. Using a Byte Literal

b = b"hello"

These methods let you control how text or numbers are encoded into a compact and binary-safe format.

The bytes() constructor can also take a sequence of integers or even tuples with numbers from 0 to 255. The return value will always be a bytes class object.


Convert String to Bytes Python

One of the most common operations is converting a string to a bytes object:

text = "example"
bytes_obj = text.encode("utf-8")

This process is essential when sending data over a network or storing data in binary files. The opposite of this operation—bytes to string—requires decoding.

If you skip specifying the encoding, Python 3 uses UTF-8 as the default encoding, which works for most unicode characters.


Python Bytes to String Conversion

To convert bytes back to a string:

bytes_obj = b"example"
text = bytes_obj.decode("utf-8")

Always match the encoding method during decoding to avoid errors.

For lower-level conversions, built-in functions like ord() and chr() or tools in the codecs module can handle specialized encodings.


Working with Byte Arrays in Python

If you need a mutable version of bytes, Python provides the bytearray type. This lets you modify the binary content directly:

b_arr = bytearray(b"data")
b_arr[0] = 68  # Changes 'd' to 'D'
print(b_arr)  # bytearray(b'Data')

Each element represents a single byte, so it must be between 0 and 255.

Use bytearray when performance matters and you need to update contents frequently.


Python Can't Concat str to Bytes Error

Trying to concatenate a string and a bytes object will raise an error:

b = b"data"
s = "log"
result = b + s  # TypeError: can't concat str to bytes

You must explicitly encode or decode one of them first:

result = b + s.encode("utf-8")

This is a common traceback error for new Python developers. It reminds you that strings (Unicode) and bytes (binary) are different data types.


Use Cases of Python Bytes

1. File I/O in Binary Mode

with open("image.jpg", "rb") as f:
    data = f.read()

This reads the binary content of a file into a bytes object.

2. Network Programming

Bytes are required when working with sockets:

import socket
sock = socket.socket()
sock.send(b"GET / HTTP/1.1\r\n\r\n")

3. Encoding/Decoding Data for APIs

JSON APIs often require data to be encoded as UTF-8 bytes before transmission.


Python Convert Bytes to String

You often need to convert binary data into human-readable text. Use .decode() for this:

b = b"text"
s = b.decode("utf-8")

This is common when reading from a network buffer or file input.

For debugging, you can use the .hex() method to get a hexadecimal representation, optionally adding a separator like ":".


Python Convert String to Bytes

For converting the other way, use .encode():

s = "text"
b = s.encode("utf-8")

This is helpful before writing to binary files or transmitting via sockets.

If you handle ASCII-only text, encoding to ASCII characters is faster, but it will fail for unicode characters outside the ASCII range.


Python Bytes to Integer

You can convert bytes to integers using int.from_bytes():

b = b"\x00\x10"
num = int.from_bytes(b, byteorder="big")
print(num)  # 16

This is used in low-level protocol decoding and binary formats.


Python Bytes and Memory Efficiency

Bytes objects are more memory-efficient than strings when dealing with binary content. They use less overhead and are better suited for performance-critical operations like cryptographic hashing or image processing.


Python Byte Array Use Cases

Use a Python byte array when:

  • You need to mutate byte data
  • You're building packets for custom protocols
  • You require memory-efficient buffers

For instance, compression libraries often accept or return byte arrays.


Python bytes provide a fast and reliable way to handle binary data. You can convert between strings and bytes easily using .encode() and .decode(). When you need mutability, use bytearray. Understanding how Python handles bytes helps you avoid errors like "can't concat str to bytes" and gives you tools to write cleaner, more efficient code.

You can safely manage file I/O, network operations, and low-level system interactions with bytes and byte arrays. These types are core to Python’s ability to work across text and binary worlds efficiently.

Learn to Code in Python for Free
Start learning now
button icon
To advance beyond this tutorial and learn Python by doing, try the interactive experience of Mimo. Whether you're starting from scratch or brushing up your coding skills, Mimo helps you take your coding journey above and beyond.

Sign up or download Mimo from the App Store or Google Play to enhance your programming skills and prepare for a career in tech.

You can code, too.

© 2025 Mimo GmbH

Reach your coding goals faster