简 介: 对于在MM32F3277的MicroPython下, 对于SD卡中的文件按照二进制方式进行读写进行测试,发现MicroPython下无法支持对于二进制文件的操作。根据现在这种测试,需要找到具体的 MM32F3277现在版本上对于文件操作所存在的问题。使其能够支持对于二进制数据的读取和写入。
关键词
: MicroPython,MM32,MM32F3277
§01 二进制文件
使用二进制文件存储数据可以100%利用文件大小,而使用ASCII码存储数据则往往只能达到50%的存储效率。也就是一个原来的8bit的二进制数据需要两个byte来表示。
一、在MicroPython中操作二进制文件
下面这段代码,分别运行在MM32F3277的MicroPython中,以及电脑中,所得到的结果不同。
1、MicroPython中的结果
- 运行代码:
from machine import Pin
import utime
filename = 'data.dat'
with open(filename, "wb") as f:
f.write(b'\x01\x02')
with open(filename, 'rb') as f:
buf = f.read()
print(type(buf))
print(buf)
- 输出结果:
>> Download MicroPython : 28 lines/625 characters.
>> -------------------------------------------------------------------------
Error:5/525
2
<class 'str'>
可以看到,上面对于SD卡中的文件,如果写入的数字不是ASCII码,在读出的时候出现错误。
2、Windows中运行结果
- 运行代码:
from head import *
filename = r'd:\temp\data.dat'
with open(filename, "wb") as f:
f.write(b'\x01\x02')
with open(filename, 'rb') as f:
buf = f.read()
printf(type(buf))
printf(buf)
- 输出结果:
<class 'bytes'>
b'\x01\x02'
二、为什么不同呢?
上面的输出的结果可以看到,在MicroPython
下,是无法在文件中写入非ASCII
数据的。并且 f.read()
返回永远是 <class ‘str
’>。 在Windows
下, 返回的数据类型是 <class 'bytes'>
在MicroPython下,如果:
with open(filename, "wb") as f:
f.write(b'\x55\x56')
那么可以返回:
2
<class 'str'>
UV
>>>
在Windows下返回结果为:
<class 'bytes'>
b'UV'
1、那么问题来了
为什么有这样的区别呢?
2、所带来的问题
这样所带来的问题,就是降低了MicroPython下文件存储的效率。并且对于读入的数据,如果只能是ASCII码,也会使得处理的效率降低。
比如在SD卡中如果存储一个MP3的文件,进行播放其中的音乐数据,按照现在的方式是无法由MicroPython读入的。
※ 改进MicroPython ※
对于在MM32F3277的MicroPython下, 对于SD卡中的文件按照二进制方式进行读写进行测试,发现MicroPython下无法支持对于二进制文件的操作。根据现在这种测试,需要找到具体的 MM32F3277现在版本上对于文件操作所存在的问题。使其能够支持对于二进制数据的读取和写入。