# 如何将整型 int 转换为字节 bytes

Jinku Hu 2023年1月3日 2018年2月14日 Python Python Bytes

## Python 2.7 和 3 中 `int` 到 `bytes` 转换的通用方法

``````>>> import struct
>>> struct.pack("B", 2)
'\x02'
>>> struct.pack(">H", 2)
'\x00\x02'
>>> struct.pack("<H", 2)
'\x02\x00'
``````

`struct.pack` 函数中的第一个参数是格式字符串，它指定了字节格式比如长度，字节顺序(little/big endian)等。

## Python 3 中新引入的 `int` 到 `bytes` 的转换方法

### 使用 `bytes` 来进行 `int` 到 `bytes` 的转换

``````>>> bytes([2])
b'\x02'
``````

``````>>> bytes(3)
b'\x00\x00\x00'
``````

### 通过 `int.to_bytes()` 方法将整型转换为字节类型

``````>>> (258).to_bytes(2, byteorder="little")
b'\x02\x01'
>>> (258).to_bytes(2, byteorder="big")
b'\x01\x02'
>>> (258).to_bytes(4, byteorder="little", signed=True)
b'\x02\x01\x00\x00'
>>> (-258).to_bytes(4, byteorder="little", signed=True)
b'\xfe\xfe\xff\xff'
``````

## 运行速度比较

Python 3 中, 你有 3 种方法可以转换 `int``bytes`

• `bytes()` 方法
• `struct.pack()` 方法
• `int.to_bytes()` 方法

``````>>> import timeint
>>> timeit.timeit('bytes([255])', number=1000000)
0.31296982169325455
>>> timeit.timeit('struct.pack("B", 255)', setup='import struct', number=1000000)
0.2640925447800839
>>> timeit.timeit('(255).to_bytes(1, byteorder="little")', number=1000000)
0.5622947660224895
``````

`bytes()` 0.31296982169325455 s
`struct.pack()` 0.2640925447800839 s
`int.to_bytes()` 0.5622947660224895 s

Author: Jinku Hu

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.