我正在将带符号的十进制转换为文件中的二进制读取值,并将二进制值转换为文件后转换。
这是我的代码,但它给了我错误的答案:
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.
答案 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
与负数一起使用。