Matlab:16进制excel转2进制mat

情景再现

前端时间我得到一份16进制矩阵表格,一些原因使得需要将16进制转为2进制(4位)以供matlab加载使用。我尝试了以下方法:

【方法1】(失败)
我尝试了excel中的查找替换功能 【Ctrl+H】,试图将其在excel里直接转为二进制,发现这种方式会使转换得到的二进制 失去前端的0 ,具体步骤如下,然而这并不能满足我的需求。
Ctrl+H替换替换结果
上面excel红圈本来数据是6替换后变成了【110】,而不是【0110】,失去了前端的0。

【方法2】(失败)
于是我又想起了excel里的 【设置单元格格式】,选择 【文本】,这个格式设置会使单元格显示的内容与输入完全一致,即你输入【0000】,单元格里也是【0000】,如下图所示。
图1
设置了这个之后,然后我又重复第一个方法的操作,发现得到的结果和方法1是一模一样的。限于自身对excel的熟悉程度,只能利用matlab转换了。

前期数据处理

第一步:利用matlab的【导入数据】,将16进制excel导入matlab。选择数值矩阵,再把非数值的【A-F】替换为【10-15】,这里的替换可以在excel里实现,我也觉得excel转这个还是比较方便的。如下所示:

之所以要替换是因为字母不是数值,不处理的话会使字母被【NaN】替换。
导入16进制excel下图是我用excel转10进制导入matlab的展示:
10进制excel的导入红圈的地方都要注意哦,【LDPC16】将是导入数据的名字。如下所示:
在这里插入图片描述

转换开始

那现在我们已经有10进制数据了,该开始转换了!

matlab中有一个函数dec2bin(),它可以将十进制数字转为二进制,不幸的是,转换结果依然会把前端的0丢掉

丢掉也没事,我们补上就行了对不对。该怎么补?那当然是利用字符来补

那具体怎么补?我们要求得到的是4位二进制,那么经过dec2bin(),我们无非得到的是这四种二进制:【xxxx】【xxx】【xx】【x】,我们要把他们变成【xxxx】【0xxx】【00xx】【000x】。那我们在得到二进制结果时,将其转换为字符串,再根据其长度加上缺少的0就ok了。最后再把字符串转为数值就行了。

代码如下,注释很详细,应该都看的懂:

%% 十六进制数据表格转二进制矩阵 注:十六->十可以在Excel中完成
[m,n]=size(LDPC16);%获取导入数据的维数
H1=LDPC16;%HO为十进制数据矩阵,备份
A=[];%为十转二准备
B=[];%为填充转换后的二进制序列准备
D=[];%为char->int做准备
for i=1:m
    for j=1:n
        a=dec2bin(H1(i,j)); %获取十进制转二进制结果
        switch(length(a))   %因matlab会删除首0,即序列头部的0的子序列,所以在此补充0,保持四位二进制
            case 1
                A=['000' a];%二进制1需补充三个0,同时int->char
            case 2
                A=['00' a];%00xx
            case 3
                A=['0' a];%0xxx
            case 4
                A=[a]; %xxxx
        end
        B=[B A]; %将每个转换结果依次衔接
    end
end
for i=1:n*m*4
    x=str2num(B(i)); %char->int
    D=[D,x];         %将二进制数字依次衔接起来
end
HB=reshape(D,[n*4,m]);
HB=HB';%因matlab按列读取矩阵,因此需转置
save HB %保存转换后的二进制矩阵.mat

转换前后展示:
在这里插入图片描述
在这里插入图片描述

备注

因为我的数据是LDPC码的矩阵,所以转换后应仍为矩阵,
即把56×64的16进制矩阵变成56×256的2进制矩阵。这个过程表现在维数上仅仅是列扩展4倍而已。但加0转换后的字符串经数值化后是一个数字串,所以要把二进制数字串4位分割恢复为原来的矩阵样式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值