在matlab中,怎么把有符号16进制数转化为十进制数。

在matlab中,怎么把有符号的16进制数转化为十进制数。注意,是有符号位的!!!如:输入hex2dec('FF')的结果是255,显然matlab把FF当作无符号整型来... 在matlab中,怎么把有符号的16进制数转化为十进制数。注意,是有符号位的!!!

如:输入hex2dec('FF')的结果是255,显然matlab把FF当作无符号整型来看待了。

但如果把FF看作有符号数,它应该是-1,请问这怎么用matlab来实现。

谢谢大家。。
展开
 我来答
娱乐小八卦啊a
高粉答主

2020-05-19 · 娱乐小八卦,天天都知道
娱乐小八卦啊a
采纳数:256 获赞数:117831

向TA提问 私信TA
展开全部

代码功能实现将有符号的十六进制数据转换为有符号的十进制数据并存储到txt文件:

clear all

clc

%% 读入十六进制数据

fid = fopen('C:\Users\Administrator\Desktop\test\data_hex.txt', 'r+');

if fid == -1

    disp('fopen failed');

else

    ReadData = textscan(fid,'%s');

end

fclose(fid);

%% 从元胞数组中读出16进制数,并转换为无符号数据

for i=1:length(ReadData{1})

    data(i) = hex2dec(ReadData{1}{i});

end

%% 根据数据位宽,将无符号的数据转换为有符号数据(无符号数据不需要此操作)

for i=1:length(data)

    if(data(i) > 2^8/2-1)%8位宽的数据有符号数据取值范围[-128,127],(2^8/2-1=127),根据实际位宽修改

        data_dec(i) = data(i) - 2^8;

    else

        data_dec(i) = data(i);

    end

end

扩展资料

matlab读取十六进制数

通过串口向上位机发送的数据往往是16进制数,但是我们直观的比较数据则是用10进制的形式,这就需要将16进制数转化成10进制数。

通过串口调试助手将采集的数据保存成TXT文档后第一个问题就是Matlab如何读取TXT文件的值,matlab有个函数textread 就可以实现,当然用fopen也可以,但textread 比较简单。textread的使用可以参考help文档。将16进制转化成10进制用到了matlab的另外一个函数hex2dec(a)。

读取二进制txt文件:

假如txt文档中内容为0001 0010 0011 0100 1000,保存在pin.txt文档中

使用a=textread('pin.txt','%s')'

a = '0001'    '0010'    '0011'    '0100'    '1000'

可以看到数据保存为了char格式。

有空飘过的
推荐于2017-09-19 · TA获得超过4945个赞
知道大有可为答主
回答量:1448
采纳率:50%
帮助的人:1856万
展开全部
写个简单的函数即可
function decval=hex2decWithSign(hexval, length)

decval = hex2dec(hexval);
sign = bitget(decval, 4*length);
negative_numbers = (sign == 1);
decval(negative_numbers) = decval(negative_numbers) - bitshift(1, 4*length);

用法:
>> hex2decWithSign({'FFFF', '0000'}, 4)

ans =

-1
0

>> hex2decWithSign('FFFF', 5)

ans =

65535
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式