为什么在MM32中的MicroPython中无法打开二进制文件呢?

简 介: 对于在MM32F3277的MicroPython下, 对于SD卡中的文件按照二进制方式进行读写进行测试,发现MicroPython下无法支持对于二进制文件的操作。根据现在这种测试,需要找到具体的 MM32F3277现在版本上对于文件操作所存在的问题。使其能够支持对于二进制数据的读取和写入。

关键词 MicroPythonMM32MM32F3277

二进制文件 文章目录 在MicroPython中操作二进制文件 MicroPython中的结果 Windows中运行结果 为什么不同呢? 那么问题来了 所带来的问题 改进MicroPython

 

§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现在版本上对于文件操作所存在的问题。使其能够支持对于二进制数据的读取和写入。


上一篇:iOS中 @synthesize 和 @dynamic


下一篇:grep多个关键字“与”和“或”