读写bin

前言

工程中经常将参数文件存储为bin格式, 但是实际中为了分析其参数, 也不好用C++去读取调试它, 所以可以用matlab或者python去读取它, 但是还是蛮坑的

Matlab中的读取和写入

写入文件

比较坑的是, 一定要注意自己的文件存储的类型, 比如数值是float还是double之类的, 不然很容易在读取的时候出问题.

关于数字的写入方法如下:

fileID=fopen('MatrixTest.bin','w');%w+是不擦除,直接附加内容
a=[1,2,3;4,5,6;7,8,9];
fwrite(fileID,a,'double');%存储为double类型
fclose(fileID);

文本的写入方法同样:

fileID=fopen('TxtTest.bin','w');%w+是不擦除,直接附加内容
a='哈哈哈哈嗝';
fwrite(fileID,a,'char');%写入格式char
fclose(fileID);

读文件

一定要与写入的数据类型相同

读取bin中存储的矩阵

fileID=fopen('MatrixTest.bin');
A=fread(fileID,[17,17],'double')
fclose(fileID);
%% 输出
A'

ans =

     1     4     7     2     5     8     3     6     9

可以发现matlab是列读取的, 如果我们知道矩阵的大小,那么就可以指定好

fileID=fopen('MatrixTest.bin');
A=fread(fileID,[3,3],'double')
fclose(fileID);
%输出
A =

     1     2     3
     4     5     6
     7     8     9

如果我们将double类型替换成float,得到的结果就是

A =

         0    2.2500         0
    1.8750         0    2.0000
         0    2.4375         0

可以发现是完全错误的,当然我们不指定类型, 即去掉double, 最终的结果也是错误的, 因而这个格式需要非常严格.

读取文本就需要用另一个函数native2unicode,而且不需要指定数据类型

fileID=fopen('TxtTest.bin');
A=fread(fileID);
native2unicode(A')
fclose(fileID);
%输出
ans =

哈哈哈哈嗝

Python中的读取和写入

主要涉及到tofilefromfile两个函数, 同时也必须注意存储的矩阵数值的类型

写入文件

import numpy as np
import sys
a=np.arange(1,10,1).reshape(3,-1)
a=np.asarray(a,dtype='float')
a.tofile('matrix_a.bin')

这样我们就在bin文件中存储了一个矩阵, 类型为float

[[ 1.  2.  3.]
 [ 4.  5.  6.]
 [ 7.  8.  9.]]

读取文件

读取就很简单了,就一个函数,只不过要提前知道数据类型

b=np.fromfile('matrix_a.bin','float')
#输出
#[ 1.  2.  3.  4.  5.  6.  7.  8.  9.]

总结

从这里可以发现, 无论是matlab还是python, 我们存储和读取的时候的数据类型一定要一致,不然读到的结果就是错误的. 还可以发现matlab是按列存储, python是按行存储的

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

风翼冰舟

额~~~CSDN还能打赏了

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

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

打赏作者

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

抵扣说明:

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

余额充值