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

举报
tsinghuazhuoqing 发表于 2021/12/26 00:15:51 2021/12/26
1.3k+ 0 0
【摘要】 简 介: 对于在MM32F3277的MicroPython下, 对于SD卡中的文件按照二进制方式进行读写进行测试,发现MicroPython下无法支持对于二进制文件的操作。根据现在这种测试,需要找到...

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

关键词 MicroPythonMM32MM32F3277

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

§01 进制文件


  使用二进制文件存储数据可以100%利用文件大小,而使用ASCII码存储数据则往往只能达到50%的存储效率。也就是一个原来的8bit的二进制数据需要两个byte来表示。

  下面通过 设计带有SD卡的 MM32F3277 MicroPython 实验板 测试在MicroPython对于二进制文件的操作。

一、在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读入的。

三、测试ESP8266中的MicroPython

  在ESP8266上的MicroPython进行测试。

  • 测试代码:
from machine                import Pin
import utime

filename = 'data.dat'

with open(filename, "wb") as f:
    f.write(b'\x55\x56')

with open(filename, 'rb') as f:
    buf = f.read()
    print(type(buf))
    print(buf)

  
 
  • 输出结果:
>> Download MicroPython : 28 lines/625 characters.
>> -------------------------------------------------------------------------

2
<class 'bytes'>
b'UV'
>>> 

  
 

▲ 图1.2.1 乐鑫ESP8266

▲ 图1.2.1 乐鑫ESP8266

进MicroPython ※


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

  通过测试在ESP8266读写二进制代码,可以看到在ESP8266中是可以完成对于Binary的文件的读写测试的。


■ 相关文献链接:

● 相关图表链接:

文章来源: zhuoqing.blog.csdn.net,作者:卓晴,版权归原作者所有,如需转载,请联系作者。

原文链接:zhuoqing.blog.csdn.net/article/details/121581122

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。