如何将带符号的十进制转换为二进制

时间:2016-08-27 15:33:33

标签: matlab

我正在将带符号的十进制转换为文件中的二进制读取值,并将二进制值转换为文件后转换。

这是我的代码,但它给了我错误的答案:

fid = fopen('dec_bin.txt','r');
fid1=fopen('dec_bin_con.txt','w');
tline = fgetl(fid);
 while ischar(tline)
  disp(tline);
  abstline=abs(tline);
  if abstline==tline
  out_1a=dec2bin(tline,8);
 else
 out_1a=dec2bin(tline+256,8); 
 end;
 disp(out_1a);
 fprintf(fid1,'%s \n',out_1a);
 fprintf(fid1,'\n');
  tline = fgetl(fid);
  end
fclose(fid);
fclose(fid1);

我的输入文件是:

 0 
-1 
1 
-2 
2 
-3 
3 
-4 
4 

当我将其转换为二进制时,我得到了这个输出:

00110000 
0000110110100011 
00110001 
0000110110100110 
00110010 
0000110110100111 
00110011 
0000110110110010 
00110100

我的期望是:

I'll add this part when I got time.

1 个答案:

答案 0 :(得分:0)

首先,您正在使用fgetl从文件中读取一行,该行返回的字符串不是整数。然后你正在使用char检查它是ischar,这就是程序进入while-loop的原因。

但您应该知道1不等于'1'

根据您的输入,abs函数返回如下内容:

abs(['0' '-1' '1' '-2' '2' '-3' '3' '-4' '4'])
ans =

   48   45   49   49   45   50   50   45   51   51   45   52   52

abs在这种情况下没有效果,它不会给你绝对值。 然后你的代码输出如下:

dec2bin(abs(['0' '-1' '1' '-2' '2' '-3' '3' '-4' '4']))
ans =

110000
101101
110001
110001
101101
110010
110010
101101
110011
110011
101101
110100
110100

另请注意,您不能将dec2bin与负数一起使用。