将源文件读入matlab后二进制输出到文本文件

代码地址:http://download.csdn.net/download/gsh_hello_world/10116327
注意:fprintf按列输出dataOut的元素,所以需要将其转置

% [此程序为最新版]11.14更新程序,可以直接读取某个路径的文件,然后获取其文件名
% 输入:inData文件夹
% 输出:outData文件夹
% 345M文件生成二进制时间为126.9375秒,还原为源文件时间为243.2653秒
function [] = convert_to_binary()
%% 将源文件转为二进制 
clear all;
clc;
%C:\Users\Cheng YuQi\Desktop\
tic;%统计时间
Dir=dir('E:\Binary\_to_java\_inData');%_inData文件名
filename=strcat(Dir(3).folder,'\',Dir(3).name);%生成路径
file_id = fopen(filename, 'rb');%file_id:文件句柄值
fid=fopen('E:\Binary\_to_java\_outData\outdata.txt','w+');%输出

while(feof(file_id) == 0)
    data = fread(file_id, 30 * 10^6);%XX为存放数据的矩阵  每次读取30 * 10^6个字节
    data = uint8(data);
    dataOut = dec2bin(data);
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % dataOut = uint8(zeros(length(data), 8));
    % for i=1:1:8
    %     dataOutTmp = rem(data(:,1),2);
    %     data = floor(data / 2);
    %     dataOut(:, 9 - i) = dataOutTmp;
    % end
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % dataOut = dataOut';
    % dataOut = dataOut(:);
    % [x, y] = size(dataOut);
    fprintf(fid,'%s',dataOut');%fprintf按列输出dataOut的元素,所以需要将其转置
end

fclose('all');
t1 = toc;%统计时间
disp(['生成二进制时间为',num2str(t1),'秒']);

%% 将二进制还原为源文件
tic;
fid = fopen('E:\Binary\_to_java\_outData\outdata.txt','rb');

% i=find('.'==Dir(3).name);%寻找后缀名前面的标志‘.’
% suffix=Dir(3).name(i:end);%去除文件名,提取单纯的文件后缀
filename2=strcat('E:\Binary\_to_java\_outData\',Dir(3).name);%生成含后缀的路径
file_id = fopen(filename2, 'wb');

while(feof(fid) == 0)
    A = fread(fid, 30 * 10^7);
    A = A - 48;
    x = size(A, 1);
    Areshape = reshape(A, 8, x/8)';%按照列填充

    %bin2dec运行太慢,程序替换此函数 begin
    for i=1:1:8
       Areshape(:,i) = Areshape(:,i) * (2^(8-i));
    end
    Areshape = sum(Areshape, 2);%按行相加(1:按行,2:按列)
    Areshape = uint8(Areshape);
    %bin2dec运行太慢,程序替换此函数 end

    fwrite(file_id,Areshape,'uint8');
end

fclose('all');%解决fclose了test.rar文件后,文件仍然占用的问题
t2 = toc;%统计时间
disp(['还原为源文件时间为',num2str(t2),'秒']);
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大师兄电子工作室

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

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

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

打赏作者

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

抵扣说明:

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

余额充值