如何用matlab实现将正负小数矩阵转为二进制比特流

比如说下列7行1列的矩阵转为每个数用8位二进制数来表示。
x=
-0.0039
-0.0071
-0.0071
-0.0011
0.0043
0.0034
0.0029
如果还有余力的大神,也恳请指教恢复回原来正负小数矩阵的源代码!高分悬赏!求指教!!!

8位二进制最多表示256种数据

显然不能使用浮点数来储存

看你的数据格式都是0.00xx的小数形式,那么我们可以用定点数来表示
一种比较简单的办法就是将原来的数乘上10000倍
那么都会变成整数,由于8位有符号整数的表达范围是-128~127
我们可以用8位有符号整数来表示你的数据,默认其表示的是小数点后4为的数
这样就可以获得-0.0128~0.0127范围以内的小数

解码也比较简单,每8位二进制数一起看成是一个8位有符号数
将获得的数除以10000,得到浮点数就是原来的小数了。

%编码
x=[-0.0039;-0.0071;-0.0071;-0.0011;0.0043;0.0034;0.0029;];
a=int8(x*10000);
fid=fopen('dat.bin','w');
fwrite(fid,a,'int8');%转化为进制流,写入文件
fclose(fid);

%解码
fid=fopen('dat.bin','r');
b=fread(fid,inf,'int8');%读出二进制流文件中的数据
fclose(fid);
y=b/10000;%还原数据追问

我用txt形式打开都是一堆乱码,而且你写入文件的不只是乘完10000后的正负整数,并不是01的比特流?

追答

在内存里,硬盘里就是二进制的比特流
由于是二进制形式存储的,你想以txt文本方式打开就显示乱码
你可以看到文件的大小是7个字节,就是56个比特
如果你想要看到0,1 的样子就转化为字符串吧

由于使用dec2bin,使用只限正数,将原来的数+128,使其范围变成0~255
用无符号的8为整数 uint8表示
编码使用dec2bin转为'0','1'字符串
解码使用bin2dec把字符串变为数字

x=[-0.0039;-0.0071;-0.0071;-0.0011;0.0043;0.0034;0.0029;];
a=uint8(x*10000+128);
code=dec2bin(a,8);
code=code(:).';%编码字符串

fid=fopen('dat.txt','w');
fwrite(fid,code,'char');%写入txt文件
fclose(fid);

b=reshape(code,[length(code)/8 8]);
y=(bin2dec(b)-128)/10000;%解码数组

由于转化为字符串,你能看到'0','1'的样子
所以写进去的dat.txt是看的见的01串,每个字符占一个字节,文件大小是56个字节
比用二进制存储的大了8倍

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-02-25
转换,图像的灰度值为二进制,然后在二进制的最后三位加入你的比特流!
例如
灰度值是 200
十进制专二进制, b=dec2bin(200);
加入后三位 b(end-2:end,:)='010';
再转换为 十进制 g = bin2dec(b);

还有matlab中二进制是字符串一定要注意

如何用matlab实现将正负小数矩阵转为二进制比特流
一种比较简单的办法就是将原来的数乘上10000倍 那么都会变成整数,由于8位有符号整数的表达范围是-128~127 我们可以用8位有符号整数来表示你的数据,默认其表示的是小数点后4为的数 这样就可以获得-0.0128~0.0127范围以内的小数 解码也比较简单,每8位二进制数一起看成是一个8位有符号数 将获得...

如何将matlab中的矩阵以二进制存储?
假设你要保存的矩阵为M;如下所示:M=[1 2 3 4;5 6 7 8;1 1 1 1];fp = fopen('a.txt','wb');fprintf(fp,'%f\\r\\n',M);fclose(fp);这样就把M中的数据保存在当前目录下的a.txt文件里了,你是要把矩阵的数据转换为二进制后在保存为二进制形式吗?

matlab如何对矩阵进行转置?
1、首先需要知道matlab中矩阵后面加单引号是共轭转置,加点和单引号是转置,如下图所示:2、在matlab命令行窗口中输入“ A=[1 2 4;5 6 7]”,如下图所示:3、输入 A.',对矩阵进行转置,可以看到2行3列的矩阵变成了3行2列的矩阵,行列变换,如下图所示:4、也可以看一下共轭转置,输入A',...

matlab中怎样将一维数组转化为二维矩阵
1、可以使用内置的reshape函数 2、reshape把指定的矩阵改变形状,但是元素个数不变,例如,行向量:a = [1 2 3 4 5 6]执行下面语句把它变成3行2列:b = reshape(a,3,2)执行结果:b = 1 4 2 5 3 6 觉得有帮助就采纳吧

在Matlab中怎么把一个数组转换为二进制(原来是十进制的)?)
使用dec2bin()函数 b=double(b);[M N]=size(b);for i=1:M for j=1:N I(i,j)=str2double(dec2bin(b(i,j)));end end dlmwrite('datac.txt',b);这样保存的就是每个数据的二进制形式。下次再读数据时,用load('datac.txt'),不要用textread('datac.txt'),因为写的时候没有设置...

matlab怎么表示一个矩阵的转置?
具体方法如下:详细解释:在MATLAB中,矩阵的转置是一个常见的操作。转置操作会将矩阵的行和列互换位置。在MATLAB中表示矩阵转置有几种方法:1. 使用单引号加字符“T”来表示转置。例如,假设有一个矩阵A,其转置可以表示为AT。这个操作可以通过将原矩阵与转置运算符相乘来实现,得到的结果就...

matlab三维矩阵怎么转为二维矩阵?
方法1:采用reshape处理。方法2:采用:squeeze 处理。方法3:在定义的时候,抽取元素形式为A=B(:,:,i)。1.matlab中三维数组顺序是:行、列、页。二维数组只有行、列。如果两只之间赋值,有一个维数缩减问题需要注意。前者可以缩减为二维,而后者不能缩减为二维的主要原因就在于,三维矩阵中,第一维度...

matlab中怎么求矩阵的转置
在Matlab中求矩阵的转置可以通过多种方式实现,最常见的方法是使用单引号运算符。详细解释如下:1. 使用单引号运算符求矩阵转置 在Matlab中,求矩阵的转置非常简单。如果你有一个矩阵A,你可以使用单引号运算符来获得其转置矩阵。例如,如果A是一个m×n的矩阵,那么A'就是一个n×m的矩阵,表示A的...

如何把matlab中的矩阵翻转排列?
fliplr,是指对矩阵操作的函数,可以实现矩阵翻转。将一维数组逆序排列步骤(如a=[1,2,3,4,5]转成b=[5,4,3,2,1]):1、双击打开matlab应用程序。2、在matlab界面中的“命令行窗口”中输入命令。3、根据红色区域位置,在“命令行窗口”输入“a=[1,2,3,4,5]”。4、通过函数fliplr求矩阵...

MATLAB里求转移矩阵的命令怎么用
命令为:rand(5)*20+30;解释:5表示的是阶位数,20是开始的数值,30是从开始数值算起的结束数值(20+30),rand是固定用法。备注:所以只需要任意调整5、20、30的值即可实现任意的“均匀分布”。

相似回答