Matlab有符号十进制小数转换为有符号十六进制数

实现内容:

1) 通过Matlab将生成的随机小数扩大为20位有符号位
2) 将拓展后的数据变为补码格式: 负数变为补码,正数保持不变
3)将补码格式的十进制小数转换为有符号十六进制数
4)将生成的十六进制数写入.coe文件中

代码实现
% generate the random number
for i = 1: 10
    M(i,1)= (-1)^i *rand(1);
end
    
N = length(M);
Radix       = 16;
Coeff_width = 20;

% convert the fraction number to integer
% 20 bits with 1 signed bit
M_mul = round(M.*2^(Coeff_width-1));  

% convert the coefficient to complement format
for i = 1: N
    if(M_mul(i) < 0)
        comple_M(i) = 2^Coeff_width + M_mul(i);
    else
        comple_M(i) = M_mul(i);
    end
end

%% write the real part .coe file
fid = fopen('M.coe','w');%File storage path
fprintf(fid,'Radix = %d; \n',Radix);
fprintf(fid,'Coefficient_Width = %d; \n',Coeff_width);
fprintf(fid,'CoefData = ');  

% convert the complement format to hex format
for i = 1: N
    hex_M = dec2hex(comple_M(i),5);              % 5 bits HEX = 20 bits binary
    if( i < N ) 
        for j=1:5
            fprintf(fid,'%s',hex_M(j));       % print 5 bits hex data
        end
        fprintf(fid,',\n');
    else
        for j=1:5
            fprintf(fid,'%s',hex_M(j));
        end
        fprintf(fid,';\n');
    end
end
fclose(fid);

结果

运行结果如下图所示,左边为十进制数据,右边为十六进制数据,数据一致。
results

  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值