在MATLAB中的数组中插入十六进制值

时间:2015-01-26 07:54:02

标签: matlab

我是matlab的新手。我想将十六进制值存储在数组中,如下所示

P=[0x96,0x97,0x98];

但我在google上浏览我没有解决方案因此首先我将这个十六进制转换为十进制,所以我得到这样的数组

P=[150,151,152];

现在我试图获得P数组值的十六进制值。

我试过

P=[dec2hex(150),dec2hex(151),dec2hex(152)];

但是当我试图打印P(1)然后而不是96时我只得到9.我不理解这一部分。我怎样才能得到正确的结果?请帮帮我。

3 个答案:

答案 0 :(得分:4)

Matlab将十六进制数存储为字符数组(或字符串)。

所以

a = dec2hex(150)

返回:

a = '96'

像你一样连接十六进制字符串:

P=[dec2hex(150),dec2hex(151),dec2hex(152)]

返回:

P = '969798'

因此,P(1)=' 9'

您可能希望使用单元格数组分别存储十六进制数字:

P = {dec2hex(150),dec2hex(151),dec2hex(152)};
P{1}

返回:

P = '96'

要检索数值,请使用

hex2dec(P{1})

答案 1 :(得分:2)

请参阅dec2hex

的手册
dec2hex - Convert decimal to hexadecimal number in string

您收到string,因此P(1)只会为您提供该字符串的第一个字符。

尝试类似:

>> P=[dec2hex(150);dec2hex(151);dec2hex(152)]; % note the ; instead of ,
>> P

P =

96
97
98

>> P(1,:)

ans =

96

但是,P仍然是一个字符数组。

答案 2 :(得分:2)

您可以arrayfun使用dec2hex以元素方式处理它们并生成一个单元格数组作为使用格式0x...的输出 -

P=[150,151,152] %// Input array
out = arrayfun(@(n) strcat('0x',dec2hex(P(n))),1:numel(P),'Uni',0)

代码运行 -

out = 
    '0x96'    '0x97'    '0x98'