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

在matlab中,怎么把有符号的16进制数转化为十进制数。注意,是有符号位的!!!

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

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

谢谢大家。。

代码功能实现将有符号的十六进制数据转换为有符号的十进制数据并存储到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格式。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-19
写个简单的函数即可
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本回答被提问者采纳
相似回答