如何使用matlab将16进制数转化为16位的2进制数之后忽略2进制数的最高两位,再转成带符号的十进制数呢
我是读取的txt文件,文件中的数据均为DFECC001CFFEACF0等格式,将其拼为DFECC001CFFEACF0等格式的16进制数之后,转化为2进制数,并忽略其转换...
我是读取的txt文件,文件中的数据均为 DF EC C0 01 CF FE AC F0等格式,将其拼为DFEC C001 CFFE ACF0等格式的16进制数之后,转化为2进制数,并忽略其转换后的最高两位,得到14位2进制数,这14位2进制数,再根据其最高位是不是1来判断是否为补码,若为补码,则转换为是10进制负数,若最高位为0,则转换为10进制正数。
展开
展开全部
clear
fid=fopen('文件名','r');
a=fscanf(fid,'%s');
fclose(fid);
b=reshape(a,[4,length(a)/4])';
c=uint16(hex2dec(b));
x=dec2bin(c);
s=bitget(c,14);
c=bitset(c,15,s);
c=bitset(c,16,s);
out=zeros(size(c));
for ii=1:size(c,1);
if s(ii)
out(ii)=double(c(ii))-2^16;
else
out(ii)=double(c(ii));
end
end
out是最后的输出
fid=fopen('文件名','r');
a=fscanf(fid,'%s');
fclose(fid);
b=reshape(a,[4,length(a)/4])';
c=uint16(hex2dec(b));
x=dec2bin(c);
s=bitget(c,14);
c=bitset(c,15,s);
c=bitset(c,16,s);
out=zeros(size(c));
for ii=1:size(c,1);
if s(ii)
out(ii)=double(c(ii))-2^16;
else
out(ii)=double(c(ii));
end
end
out是最后的输出
追问
如果还需要加上识别“AA”这个帧头,然后把其后的数据进行拼接转换的话,应该怎么写呢?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询