【雕爷学编程】MicroPython手册之数据类型 bytes 字节字符串

在这里插入图片描述

MicroPython是为了在嵌入式系统中运行Python 3编程语言而设计的轻量级版本解释器。与常规Python相比,MicroPython解释器体积小(仅100KB左右),通过编译成二进制Executable文件运行,执行效率较高。它使用了轻量级的垃圾回收机制并移除了大部分Python标准库,以适应资源限制的微控制器。

MicroPython主要特点包括:
1、语法和功能与标准Python兼容,易学易用。支持Python大多数核心语法。
2、对硬件直接访问和控制,像Arduino一样控制GPIO、I2C、SPI等。
3、强大的模块系统,提供文件系统、网络、图形界面等功能。
4、支持交叉编译生成高效的原生代码,速度比解释器快10-100倍。
5、代码量少,内存占用小,适合运行在MCU和内存小的开发板上。
6、开源许可,免费使用。Shell交互环境为开发测试提供便利。
7、内置I/O驱动支持大量微控制器平台,如ESP8266、ESP32、STM32、micro:bit、掌控板和PyBoard等。有活跃的社区。

MicroPython的应用场景包括:
1、为嵌入式产品快速构建原型和用户交互。
2、制作一些小型的可 programmable 硬件项目。
3、作为教育工具,帮助初学者学习Python和物联网编程。
4、构建智能设备固件,实现高级控制和云连接。
5、各种微控制器应用如物联网、嵌入式智能、机器人等。

使用MicroPython需要注意:
1、内存和Flash空间有限。
2、解释执行效率不如C语言。
3、部分库函数与标准版有差异。
4、针对平台优化语法,订正与标准Python的差异。
5、合理使用内存资源,避免频繁分配大内存块。
6、利用原生代码提升速度关键部位的性能。
7、适当使用抽象来封装底层硬件操作。

总体来说,MicroPython让Python进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。

在这里插入图片描述
MicroPython的数据类型是指在MicroPython编程环境中,可以用来表示不同种类的数据的方式。MicroPython的数据类型与Python的数据类型基本相同,但也有一些区别和限制,因为MicroPython是为了运行在资源有限的微控制器上而设计的。这里将介绍MicroPython中常用的数据类型,包括数字、字符串、列表、元组和字典,以及它们的应用场景和注意事项。

一、MicroPython数据类型 bytes 字节字符串
MicroPython的bytes字节字符串是用来表示二进制数据的数据类型,由单引号或双引号括起来的一系列以0x开头的十六进制数或以\开头的转义字符组成。bytes类型可以进行索引、切片、拼接、解码等操作。bytes类型的适用范围主要是在与硬件或网络通信时,例如读写文件、发送接收数据包、处理图像音频等。

应用场景:
1、文件操作:bytes字节字符串常用于处理二进制文件,例如图像、音频、视频等文件。通过读取和写入字节字符串,可以对二进制文件进行读取、修改和保存等操作。
2、网络通信:在网络通信中,数据常以字节流的形式进行传输。bytes字节字符串可以用于表示和处理网络数据包、传输协议等二进制数据,例如将数据转换为字节字符串后进行网络传输和接收。
3、加密和哈希算法:在加密和哈希算法中,数据通常以字节形式进行处理。bytes字节字符串可以用于存储和处理加密密钥、哈希值等二进制数据,以及进行加密解密和哈希计算等操作。

注意事项:
1、bytes类型是不可变的数据类型,即不能修改其中的某个字节或者追加字节。如果要修改字节字符串,需要创建一个新的字节字符串。
2、bytes类型中可以使用转义字符\来表示特殊字节,如换行符\n,制表符\t等。如果要表示\本身,需要用\。
3、bytes类型可以使用+号进行拼接,但是效率较低。推荐使用join()方法或者格式化操作符%来拼接字节字符串。
4、bytes类型可以使用decode()方法来转换为普通字符串,但需要指定编码方式。编码方式是一种规则,用来将字节和字符之间进行映射。常见的编码方式有UTF-8、GBK、ASCII等。例如:

# 创建一个bytes对象
b = b'\xe4\xbd\xa0\xe5\xa5\xbd'
# 使用decode()方法,指定UTF-8编码,转换为str对象
s = b.decode('utf-8')
# 打印结果
print(s)

MicroPython的bytes字节字符串几个实际运用程序案例:
案例1:使用bytes类型读写文件:使用MicroPython内置的open()函数,可以打开一个文件,并以字节模式读写文件中的内容。以下是一个简单的示例代码,使用open()函数,打开一个名为sample.dat的文件,并读取其中的前4个字节。:

# 使用open()函数,以'rb'模式(读取字节)打开一个文件
f = open('sample.dat', 'rb')
# 使用read()方法,指定读取4个字节
data = f.read(4)
# 关闭文件
f.close()
# 打印结果
print(data)

案例2:使用bytes类型发送接收数据包:使用MicroPython内置的socket模块,可以创建一个套接字对象,并与网络上的其他设备进行通信。以下是一个简单的示例代码,使用socket模块,创建一个TCP客户端套接字,并向服务器发送一个字节字符串,并接收服务器回复的字节字符串。:

# 导入socket模块
import socket
# 创建一个TCP客户端套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接到服务器的IP地址和端口号
s.connect(('192.168.1.1', 80))
# 定义一个要发送的bytes对象
request = b'GET / HTTP/1.0\r\n\r\n'
# 使用send()方法,发送bytes对象
s.send(request)
# 使用recv()方法,指定接收1024个字节
response = s.recv(1024)
# 关闭套接字
s.close()
# 打印结果
print(response)

案例3:使用bytes类型处理图像数据:使用MicroPython内置的framebuf模块,可以创建一个帧缓冲区对象,并在其上绘制图形或文字。以下是一个简单的示例代码,使用framebuf模块,创建一个8x8像素的帧缓冲区,并在其上绘制一个笑脸图案。:

# 导入framebuf模块
import framebuf
# 定义一个bytes对象,表示8x8像素的图像数据
data = b'\x3c\x42\xA5\x81\x81\xA5\x42\x3c'
# 创建一个帧缓冲区对象,指定图像数据、宽度、高度和颜色格式(MONO_HLSB表示单色水平最低有效位)
fb = framebuf.FrameBuffer(data, 8, 8, framebuf.MONO_HLSB)
# 使用pixel()方法,在帧缓冲区上绘制一个像素,指定坐标和颜色(0表示黑色,1表示白色)
fb.pixel(2, 2, 1) # 左眼
fb.pixel(5, 2, 1) # 右眼
fb.pixel(3, 5, 1) # 鼻子
fb.pixel(2, 6, 1) # 嘴巴
fb.pixel(3, 7, 1) # 嘴巴
fb.pixel(4, 7, 1) # 嘴巴
fb.pixel(5, 6, 1) # 嘴巴
# 打印结果
print(fb)

案例4:读取二进制文件

file_path = "image.jpg"
with open(file_path, "rb") as file:
    data = file.read()
print("文件大小:", len(data), "字节")

这个案例中,使用bytes字节字符串从二进制文件中读取数据。使用open函数以二进制读取模式打开文件,并使用read方法读取文件中的字节数据到bytes字节字符串变量data中。最后输出读取到的字节数据的大小。

案例5:网络数据传输

import socket

HOST = '127.0.0.1'
PORT = 12345

# 创建一个TCP/IP套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接服务器
sock.connect((HOST, PORT))

# 发送数据
message = b'Hello, server!'
sock.sendall(message)

# 接收数据
data = sock.recv(1024)
print("接收到的数据:", data)

# 关闭套接字
sock.close()

这个案例中,使用bytes字节字符串进行网络数据传输。创建一个TCP/IP套接字,并使用connect方法连接到服务器。使用sendall方法发送字节数据到服务器,使用recv方法接收服务器返回的字节数据,并输出接收到的数据。最后关闭套接字。

案例6:哈希计算

import hashlib

data = b'Hello, world!'
hash_object = hashlib.sha256(data)
hash_value = hash_object.hexdigest()
print("哈希值:", hash_value)

这个案例中,使用bytes字节字符串进行哈希计算。将字节数据b’Hello, world!'传入hashlib模块的sha256函数,计算其SHA-256哈希值。使用hexdigest方法将哈希值转换为十六进制字符串,并输出哈希值。

案例7:读取二进制文件

# 从文件中读取二进制数据
with open("image.jpg", "rb") as file:
    binary_data = file.read()
# 处理二进制数据
# ...

在此示例中,使用bytes类型读取二进制文件的内容,这可用于处理图像、音频或其他二进制文件。

案例8:网络数据传输

import socket

data = b"Hello, Server!"  # 待发送的二进制数据
# 创建套接字并发送数据
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(("127.0.0.1", 8000))
sock.send(data)
# 接收服务器响应的数据
response = sock.recv(1024)
sock.close()
print("服务器响应:", response)

该示例中,使用bytes类型表示待发送的二进制数据,并使用套接字进行网络数据传输。这可用于实现客户端和服务器之间的通信。

案例9:加密操作

import hashlib

message = b"Hello, World!"  # 待加密的二进制数据
# 计算SHA256哈希摘要
hash_digest = hashlib.sha256(message).digest()
print("SHA256摘要:", hash_digest)

在此示例中,使用bytes类型表示待加密的二进制数据,并使用哈希算法计算SHA256摘要。这对于数据的加密和完整性验证非常有用。

这些案例展示了MicroPython中bytes类型的一些实际应用。通过使用bytes类型,可以进行二进制数据处理、网络通信和加密操作等。在使用bytes类型时,需要注意其不可变性以及与字符编码的区别,并确保正确处理数据以提高程序的可靠性和正确性。

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值