概述
文章目录
- 字节操作
- 字节类
- Bytes Class
- Bytearray Class
- Common Operations
- 转换
- Numpy
- Struct
- Format
字节操作
字节类
python 中处理字节有两种类型,bytes
和 bytearray
类。两者都是序列,前者类似元组(不可更改),后者类似列表。
Bytes Class
bytes
与 str
类相似。创建方法:
- 由字符创建(ASCII 码),
b'{text here}'
- From an iterable of integers:
bytes(range(20))
- A zero-filled bytes object of a specified length:
bytes(10)
bytes
可以与16进制互相转换。(.fromhex()
与 .hex()
)。
Bytearray Class
- Creating an empty instance:
bytearray(3)
(a three elements byte array) - Creating a zero-filled instance with a given length:
bytearray(10)
- From an iterable of integers:
bytearray(range(20))
- Copying existing binary data via the buffer protocol:
bytearray(b'Hi!')
Common Operations
参考字符串操作。
转换
将 Python 其余数据类型转换为 Bytes
Numpy
np.tobytes()
将 np.ndarray
转换为字节串,按照行主格式。
x = np.array([[0, 1], [2, 3]], dtype='<u2') # 小端,无符号整形,两个字节
x.tobytes()
# b'x00x00x01x00x02x00x03x00'
np.frombuffer()
将字节串转换为np.ndarray
。
np.frombuffer(b'x01x02', dtype=np.uint8)
# array([1, 2], dtype=uint8)
两者配合
x = np.array([[0, 1], [2, 3]], dtype='<u2') # 小端,无符号整形,两个字节
y = x.tobytes()
x_flat = np.frombuffer(y, dtype=np.uint16)
# np.ndarray([0, 1, 2, 3])
- Example: ROS 点云转换
ROS 中点云一般是字节串形式接受,规定了编码格式。一般是一小块中包含了 x, y, z 的信息。可以用 Numpy 快速解码
# 假设就一个点 (0, 1, 2)
a = np.arange(3)
b = a.tobytes()
# 定义每个数据块的格式
data_type=np.dtype([('x', np.int64), ('y', np.int64), ('z', np.int64)])
c = np.frombuffer(a, dtype=data_type)
c['x'] # x 信息
Struct
struct.pack(format, v1, v2, ...)
与 struct.unpack(format, buffer)
。
Format
format
中一位对应后面一个值,与 C 类似。
pack('hhl', 1, 2, 3)
# b'x00x01x00x02x00x00x00x03'
unpack
返回是元组,每个元素与format
一一对应。
最后
以上就是舒服雨为你收集整理的Python Bytes字节操作的全部内容,希望文章能够帮你解决Python Bytes字节操作所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复